约翰,在 Y031 中,您提到了以下内容:
例如,当使用 $emit、$broadcast 或 $on 发布和订阅事件时,请考虑将这些用途移动到工厂并从控制器调用。
您能否扩展一下如何实现这一点? 代码示例会很好!
我也想知道这一点,并找到了以下 stackOverflow 问题/答案: http ://stackoverflow.com/questions/14056874/how-to-emit-events-from-a-factory
就角度而言,我是相当初学者,所以如果这是不好的做法,请告诉我。 :)
我认为这也取决于您是在纯角度项目还是遗留/混合项目中。
即您想在 Angular 框架内外共享相同的事件
将 pub/sub 变成工厂使替代实现更容易替换 $emit、$broadcast。
例如http://jonathancreamer.com/an-angular-event-bus-with-postal-js/
我在理解Y031 中的以下句子时也遇到了一些麻烦:
仅在需要时才考虑在控制器中使用 $scope。 例如,当使用 $emit、$broadcast 或 $on 发布和订阅事件时,请考虑将这些用途移动到工厂并从控制器调用。
那么上面这句话的结论是完全避免使用工厂进行广播? 如果是这样,我会建议一个不同的公式。
我不是在考虑控制器间的通信,而是在考虑诸如登录/注销之类的主要状态变化。 既然我可能不得不通知几乎所有组件,如果感觉像是广播的适当任务?
如果我理解正确,我认为您误解了这个@sebastianhaas。 样式指南中的这段话建议将$emit
、 $broadcast
或$on
的用法移至工厂,而不是将用法 _with_ 替换为工厂。
感谢您的回答@zachlysobey! 是的,但是您将如何实现这一目标? 假设我想在某些广播中更新控制器中的值。 如果我将那些$on
移到工厂,我想知道如何再次通知控制器。
让我澄清一下......我在那里有一个令人困惑的句子。 关键是只在需要时使用 $scope 。 这就是你必须有一个范围来处理工作的时候。 这包括广播或发射。 当且仅当您需要发送一条消息时,这些在控制器中是可以的。 但您可能还想考虑其他选择。
我在这里要小心,因为我也想不鼓励在控制器中使用 scope.apply。
我删除了这句话。
非常感谢!
最有用的评论
这里有很好的见解http://stackoverflow.com/questions/11252780/whats-the-correct-way-to-communicate-between-controllers-in-angularjs/19498009#19498009