大佬教程收集整理的这篇文章主要介绍了AngularJS中的动态服务策略,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个存储服务和两个存储策略,StorageStrategyA和StorageStrategyB.存储为控制器和其他组件提供公共接口以与之交互:
angular.module('app').factory('Storage',function ($injector) { var storage; var setStrategy = function (Name) { storage = $injector.get(Name); }; setStrategy('StorageStrategyB'); return { getItems: function () { return storage.getItems(); } // [...] }; });
但是当策略更改时,双向绑定会中断,并且视图不会使用来自新策略的getItems()项目进行更新.
有没有办法将策略模式与AngularJS结合起来并保持双向绑定?
请注意,在我的实际应用程序中,我不能在策略更改后再次调用Storage.getItems(),因为有多个组件(视图,控制器,范围)依赖于存储并且服务更改会自动发生.
编辑:
我有forked the Plunker突出问题.如您所见,上部的数据仅更新,因为我在策略更改后再次手动调用Storage.getItems().但我不能这样做,因为其他组件 – 例如OtherController – 也访问存储上的数据,还需要自动从新策略中获取数据.相反,他们仍然坚持初始战略.
$scope.items = Storage.getItems();
因此,当您切换策略时,您不会更改项目的引用.它仍然指向StrategyB项目参考.
您必须使用以下机制来更改引用.
然后你可以做一些事情,你可以在控制器之间communicate更改项目参考.
请找到我已更新的plunkr.
$rootScope.$broadcast("@R_618_9531@eStrategy");
然后更新您的项目列表和其他人.
$scope.$on("@R_618_9531@eStrategy",function(){ $scope.name = Storage.getName(); $scope.items = Storage.getItems(); //Here changing the reference. //Anything else to @R_618_9531@e });
以上是大佬教程为你收集整理的AngularJS中的动态服务策略全部内容,希望文章能够帮你解决AngularJS中的动态服务策略所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。