angularjs – 为什么不使用$rootScope与函数?
当我正在研究
Angularjs的FEQ时,我看到下面的文章
$rootScope存在,但它可以用于恶 偶尔会有一些数据要让整个应用程序变得全局化.对于这些,您可以注入$rootScope并将其设置为像任何其他范围.由于范围从根范围继承,所以附加到指令的表达式(如ng-show)可用于本地$范围上的值. 当然,全局状态很糟糕,您应该使用$rootScope,就像您希望(希望)使用任何语言的全局变量一样.特别是,不要将其用于代码,只能使用数据.如果你试图在$rootScope上放置一个函数,那么将它放在可以被注入到需要的地方,并且更容易测试的服务总是更好. 相反,不要创建一个唯一的目的在于存储和返回数据位的服务. 所以我的怀疑是为什么不推荐使用$rootScope作为全局函数?有没有性能问题?
过去我已经回答过了,但是你提出这些问题是很好的.
非隔离范围是分层的,但大多数开发人员应该使用具有隔离范围的指令. AngularJS范围的等级性质是角度应用程序中许多错误的根源.这是一个我喜欢调用范围渗透的问题,其中范围属性在DOM树中的某个地方被神奇地修改,你不知道为什么. Angular的默认行为是固有的范围,这使得它诱使一个控制器更新由另一个控制器管理的内容,依此类推.这就是创建源代码之间的意大利面连接.使它很难维护该代码.
不,这不正确. AngularJS允许您定义常量,值和服务.这些是可以注入到路由,控制器和指令中的东西.这就是让您的应用程序在全球范围内访问的方式,如果您想要使您的控制器或指令可测试,您可以如何进行操作.单元测试作者不知道在$rootScope中哪个属性应该在一个指令或控制器所依赖的地方.他们必须假设$rootScope没有突变以提供服务或数据.
问题不是$rootScope,但是人们在做什么呢?许多应用程序将当前用户,认证令牌和会话数据添加到rootScope中.这最终在模板中被大量使用(如果用户登录,则显示X,否则显示Y).问题是HTML不通信范围层次结构.所以当你看到{{user.firstname”user.lastname}}你不知道变量用户来自哪里.第二个问题是子范围可以影响根属性.如前面的例子,如果一个指令做这个scope.user =’bla bla bla’.它没有替换rootScope上的值.它隐藏了它.现在,您在模板中收到一些奇怪的意外事件,您不知道为什么变量用户已经改变了.
Angular的$cacheFactory和$templateCache是??仅存在存储数据的服务的示例.我认为作者试图鼓励在Angular模块中使用常量和值,但这不是一个很好的描述.
$rootScope是angular.config(..)中唯一可用的范围.在这段时间内,如果这是唯一可以做到的范围,则可以修改范围.例如;您可能需要在应用程序启动之前注入API密钥或Google anayltics变量. 任何范围的功能通常都是一个坏主意.主要是因为范围中的所有内容都在模板中的表达式中消化.功能帐篷隐藏重型作业.当调用函数时,通过阅读HTML可以说明模板的沉重程度.我已经看到了像函数本身执行3级嵌套循环的函数getHeight().每个角度都需要调用这个函数来消化观察者,看看它是否改变了.你应该尽量保持模板的干燥. 无耻的自我推广: http://www.thinkingmedia.ca/2015/01/learn-how-to-use-scopes-properly-in-angularjs/ (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |