我使用Angular服务来放置我在任何地方使用的公共代码。它有效,但现在我发现了一些奇怪的东西!服务器中的变量在控制器之间共享,如果页面中有两个控制器,如果一个控制器更改变量,则会影响其他控制器。
但我不想要它!我需要一个像服务这样的系统,但每个控制器都有一个隔离的环境。有什么办法吗?
更新
app.service("myService",function(){
this.variable = 1;
});
app.controller("loginCtrl",function($scope,myService){
console.log(myService.variable); //prints 1
myService.variable++;
});
app.controller("signupCtrl",function($scope,myService){
console.log(myService.variable); //prints 2
});
我需要每个控制器使用一个新的myService(隔离)
答案 0 :(得分:0)
AngularJS中的所有服务都是单身人士。因此,任何注入的单例都可能受到另一个控制器的影响。也就是说,您还可以有意创建一个注入服务的新实例,这将保证隔离范围,前提是您不要将共享服务注入到实例化服务中。
HTML:
<div ng-app="app">
<div ng-controller="loginCtrl">
</div>
<div ng-controller="signupCtrl">
</div>
</div>
JS:
var app = angular.module('app', []);
app.controller("loginCtrl", ['$scope', 'sharedService', function($scope, sharedService){
var myService = sharedService.getInstance();
console.log(myService.variable); //prints 1
myService.variable++;
}]);
app.controller("signupCtrl", ['$scope', 'sharedService', function($scope, sharedService){
var myService = sharedService.getInstance();
console.log(myService.variable); //prints 1
}]);
app.factory('sharedService', [function () {
return {
getInstance: function () {
return new instance();
}
}
function instance () {
this.variable = 1;
}
}]);