我们假设我创建了一个工厂,服务或提供者对象
myApp.factory('myService',function() { return { counter: 0,increment: function() { console.log('counter: ' + (this.counter++)) } }; });
假设我有一个依赖它的控制器
myApp.controller('myCtrl',function(myService) { $scope.incr = function() { myService.increment(); }; }
我将此控制器应用于html的不同部分
<div ng-controller="myCtrl"> <button ng-click="increment()">increment</button> </div> ... <div ng-controller="myCtrl"> <button ng-click="increment()">increment</button> </div>
现在,当我点击每个按钮时,计数器是通用的,它会变为0,1,2,3 ……
如何编写工厂,服务或提供程序,以便每个控制器获取服务对象的不同副本?
解决方法
由于工厂是单身,您需要在工厂中使用一种方法来创建您的服务.更改您的服务以使用create方法返回执行递增的服务:
myApp.factory('myService',function() { return { create: function () { return { counter: 0,increment: function() { console.log('counter: ' + (this.counter++)); } }; } }; }); myApp.controller('myCtrl',function($scope,myService) { var service = myService.create(); $scope.incr = function() { service.increment(); }; });
<div ng-controller="myCtrl"> <button ng-click="incr()">increment</button> </div> ... <div ng-controller="myCtrl"> <button ng-click="incr()">increment</button> </div>
@L_403_0@