关于控制器之间的共享状态。我很难从所有推荐的解决方案中找到正确的方法来做到这一点。我做了这个草图来说明我对此的基本想法,到目前为止,我使用了一家工厂。
有一个工厂myFactory,它包含一个共享变量sharedVar。
控制器Ctrl1, Ctrl2, Ctrl3希望始终访问更新的版本。他们也可以叫updateViaHttp。

sharedVar?(通过引用对象、$watch、事件(广播、打开)、.)发布于 2015-05-14 11:28:28
设置的示例服务:
angular.factory('shareAndUpdate', ['dependencyInjection', function(dependency) {
var srvc = {};
srvc.sharedVar = 'something';
srvc.updateViaHttp = function(){ something };
return srvc;
}]);发布于 2015-05-14 11:28:08
您可能在寻找类似于公共服务的东西:
https://www.npmjs.com/package/angular-pubsub
然而,在我的经验中,通过适当的设计,您可以最小化在非嵌套控制器之间共享数据的必要性。
然而,有时候这是不可避免的,比如登录凭据、权限、包括所有应用程序的内容。在这种情况下,您可以使用服务在控制器之间共享/获取状态,也可以使用成熟的pubsub机制。
发布于 2015-05-14 11:31:17
工厂与服务和提供者之间的区别只与依赖注入器如何向您提供它们的实例有关。服务是专为提供单例而设计的,但只是添加了单例特定功能的工厂的包装器。没有什么能阻止你从工厂送回单身人士。
使用服务来共享状态--您需要一个单例,而一个服务使定义和注入单例变得很容易。
SomeService:
var foo = {
bar = 'a';
};
function getFoo() {
return foo;
}
SomeController[SomeService injected here] :
$scope.foo = SomeService.getFoo();
$scope.$watch('foo.bar', ...);
$scope.setFooBar = function(val) {
$scope.foo.bar = val;
};
<a href="" ng-click="setFooBar('2')">2</a>这里的一般模式是永远不要执行$scope.foo = { bar: 'Some other reference' };,因为当您覆盖它--“臭名昭著”的总是使用“点”在$scope的东西问题时,依赖于SomeService的所有其他事情都不会得到新的引用。
https://stackoverflow.com/questions/30236003
复制相似问题