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()项目进行更新. 我创建了一个Plunker来说明问题. 有没有办法将策略模式与AngularJS结合起来并保持双向绑定? 请注意,在我的实际应用程序中,我不能在策略更改后再次调用Storage.getItems(),因为有多个组件(视图,控制器,范围)依赖于存储并且服务更改会自动发生. 编辑: 解决方法
Javascript适用于引用.应用程序中的数组项目与最初使用以下语句的strategyB项目项目相同,当您自动更新StrategyB项目时,视图中的项目将更新(自相同参考).
$scope.items = Storage.getItems(); 因此,当您切换策略时,您不会更改项目的引用.它仍然指向StrategyB项目参考. 您必须使用以下机制来更改引用. 然后你可以做一些事情,你可以在控制器之间communicate更改项目参考. 请找到我已更新的plunkr. $rootScope.$broadcast("updateStrategy"); 然后更新您的项目列表和其他人. $scope.$on("updateStrategy",function(){ $scope.name = Storage.getName(); $scope.items = Storage.getItems(); //Here changing the reference. //Anything else to update }); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- node.js – 从docker容器连接到主机mongodb
- 利用BootStrap的Carousel.js实现轮播图动画效果
- 【数据结构】将一组数据升序排序(利用堆排序)
- angular – 绑定状态到属性的[(ngModel)]和[ngModel]之间的
- unix – grep -l和grep -ln
- 开发webServices的客户端-通过wsdl2java
- 抛弃WebService 在.NET4中用jQuery调用WCF
- 如何在$state angularjs中的控制器之间使用ui路由器传递对象
- 解决angularJS在IOS上刷新黑屏的问题
- scala – `val(A)=(3)`是正确的,但`val(A,B)=(2,3)`无法编译