angularjs - Controller 之间的共享状态 - angularjs

标签 angularjs

关于 Controller 之间的共享状态。我很难从 SO 上推荐的所有可能的解决方案中找到正确的方法来做到这一点。我画了这个草图来说明我到目前为止使用工厂对此的基本想法。

有一个工厂 myFactory,它拥有一个共享变量 sharedVar

Controller Ctrl1、Ctrl2、Ctrl3 想要始终访问更新版本。他们还可以调用 updateViaHttp

factory-controller-communication

  1. 这是工厂的正确目的吗? (一般来说分享状态, 特定于其他选项,如服务和提供商)

  2. 如果是这样,如何以正确的方式观察 sharedVar 的变化? (经过 对象、$watch、事件(广播、开)、...)的引用

  3. 是否有一种通用模式可以很好地用于对象、数组和 原语

最佳答案

  1. 您的基本想法是正确的,假设“工厂”指的是“服务”——我知道这有点令人困惑,因为服务是使用工厂函数声明的。也就是说,这是一个重要的区别,这样您就可以更轻松地找到文档等。

  2. 通过使用对象引用并注意 watch depths in Angular 来观察变化(我的首选方法)或通过显式注册 $watch 语句(仍要注意 watch 深度)。一般来说,我认为你不应该过度使用广播,因为它会使你的代码有点困惑。在这种情况下,它也有点违背了服务的要点,即成为共享状态的来源。

  3. 我创建服务的一般模式是将我想要使用的所有内容绑定(bind)到一个对象(包括数据和函数),然后在工厂函数中返回该对象。有时您必须引入一些额外的嵌套,这样 Javascript 原型(prototype)继承才不会打扰您(再次查看 watch depths),但这是一般的想法。

您设置的示例服务:

angular.factory('shareAndUpdate', ['dependencyInjection', function(dependency) {
    var srvc = {};
    srvc.sharedVar = 'something';
    srvc.updateViaHttp = function(){ something };
    return srvc;
}]);

关于angularjs - Controller 之间的共享状态 - angularjs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30236003/

相关文章:

javascript - AngularJS:什么是 $templateCache?

javascript - 网址中的 Angular 日期引用不正确

javascript - RequireJs VS Browserify 哪个最适合JS优化

javascript - 了解 AngularJS 中应用程序和测试中的注入(inject)依赖

javascript - AngularJS 问题仅允许在文本框中输入数字

angularjs - 使用中间件通过 ExpressJS 调用身份验证 API

javascript - 如何在 Protractor/AngularJS 测试中重用代码

javascript - 强制浏览器请求动态加载的图标

javascript - 用于搜索和更新的 Angularjs 函数

javascript - 如何清除文件输入而不丢失事件监听器和扩展属性?