AngularJS:在服务和工厂中使用$ scope / $ rootScope - 不良或正常的做法

时间:2016-04-19 14:20:28

标签: angularjs

我认为做这件事真是不好的做法:

// factory
... // some logic
$rootScope.$broadcast('SEND_USER');

// controller
$scope.$on('SEND_USER', function() { ... } );

因为这显然指出了当前工厂的错误逻辑。但我想知道它是多么糟糕。任何人都可以解释它如何降低性能以及它如何使$ digest循环复杂化?

--- --- EDIT 我一般要问:  使用服务和工厂内部的范围 - 不良或正常的做法?

1 个答案:

答案 0 :(得分:1)

好的,谢谢你的评论。所以我问了几个对AngularJS有很好理解的开发人员,我问了AngularJS chat room,我甚至在AngularJS repo中发布了Github issue,但他们关闭了它,因为它既不是bug也不是功能(我期待一些帮助)从那里虽然)。

enter image description here

所以这是我的结论:

关于是否在服务/工厂内部使用$ rootScope的决定是50/50,我不喜欢JS中的“不严格的纪律”,但它是JS,而不是Java或Python:)

我的方面是“不要在服务/工厂内使用范围”。

这里我如何看待范围的界限:

1)这是一个很好的例子,范围仅适用于View和Controller之间的交互: good example

2)这是你的服务中有范围($ scope,$ rootScope)的时候 bad example

问题不仅在于封装,内存泄漏等问题,而在于您的应用程序的设计,因此您项目的任何新手都可以轻松了解您的架构表面。还要考虑使用“Controller as”的情况,然后如何处理$ scope:)

所以我会使用范围及其$ broadcast,$ emit函数仅用于: - 指令< - >控制器 - 控制器< - >控制器

我会在Services中使用函数返回对象,承诺,回调等。当你在Service / Factory中存储一些数据时,我甚至会避免这种情况。