我认为做这件事真是不好的做法:
// factory
... // some logic
$rootScope.$broadcast('SEND_USER');
// controller
$scope.$on('SEND_USER', function() { ... } );
因为这显然指出了当前工厂的错误逻辑。但我想知道它是多么糟糕。任何人都可以解释它如何降低性能以及它如何使$ digest循环复杂化?
--- --- EDIT 我一般要问: 使用服务和工厂内部的范围 - 不良或正常的做法?
答案 0 :(得分:1)
好的,谢谢你的评论。所以我问了几个对AngularJS有很好理解的开发人员,我问了AngularJS chat room,我甚至在AngularJS repo中发布了Github issue,但他们关闭了它,因为它既不是bug也不是功能(我期待一些帮助)从那里虽然)。
关于是否在服务/工厂内部使用$ rootScope的决定是50/50,我不喜欢JS中的“不严格的纪律”,但它是JS,而不是Java或Python:)
我的方面是“不要在服务/工厂内使用范围”。
这里我如何看待范围的界限:
1)这是一个很好的例子,范围仅适用于View和Controller之间的交互:
2)这是你的服务中有范围($ scope,$ rootScope)的时候
问题不仅在于封装,内存泄漏等问题,而在于您的应用程序的设计,因此您项目的任何新手都可以轻松了解您的架构表面。还要考虑使用“Controller as”的情况,然后如何处理$ scope:)
所以我会使用范围及其$ broadcast,$ emit函数仅用于: - 指令< - >控制器 - 控制器< - >控制器
我会在Services中使用函数返回对象,承诺,回调等。当你在Service / Factory中存储一些数据时,我甚至会避免这种情况。