假设我像这样创建了一个工厂、服务或提供者对象
myApp.factory('myService', function() {
return {
counter: 0,
increment: function() {
console.log('counter: ' + (this.counter++))
}
};
});
假设我有一个依赖它的 Controller
myApp.controller('myCtrl', function(myService) {
$scope.incr = function() {
myService.increment();
};
}
我在 html 的不同部分应用了这个 Controller
<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……
我如何编写我的工厂、服务或提供者,以便每个 Controller 获得服务对象的不同副本?
最佳答案
由于工厂是单例,因此您每次都需要在工厂中使用一种方法来创建您的服务。将您的服务更改为具有返回执行递增服务的 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();
};
});
此外, Controller 方法名称与 View 中的名称不匹配:
<div ng-controller="myCtrl">
<button ng-click="incr()">increment</button>
</div>
...
<div ng-controller="myCtrl">
<button ng-click="incr()">increment</button>
</div>
Plunkr
关于angularjs - 如何创建一个不与使用它的 Controller 共享其值的服务对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30948820/