gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 23:43:31 25 4
gpt4 key购买 nike

关于 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com