angularJS服务是单例的吗?
我有一个服务方法,它将更改布尔变量的值(false是默认值)并返回控制器。 我通过单击按钮调用此服务方法 考虑一下,我点击这个按钮,现在变量值为真。 现在,我从另一个控制器访问同一个服务方法,结果是错误的。。为什么? 怎么了 第一控制器angularJS服务是单例的吗?,angularjs,Angularjs,我有一个服务方法,它将更改布尔变量的值(false是默认值)并返回控制器。 我通过单击按钮调用此服务方法 考虑一下,我点击这个按钮,现在变量值为真。 现在,我从另一个控制器访问同一个服务方法,结果是错误的。。为什么? 怎么了 第一控制器 .controller('myController1',.... $scope.value = false; $scope.buttonClick = function(){ $scope.value = myService.setVa
.controller('myController1',....
$scope.value = false;
$scope.buttonClick = function(){
$scope.value = myService.setValue(value);
}
.controller('myController2',.....
$scope.value = myService.getValue();
第二控制器
.controller('myController1',....
$scope.value = false;
$scope.buttonClick = function(){
$scope.value = myService.setValue(value);
}
.controller('myController2',.....
$scope.value = myService.getValue();
服务
angular.module('myModule', [])
.service('myService', ['OtherTypes',
function (OtherTypes) {
var myServiceVariable = false;
return {
setValue: function (value) {
myServiceVariable = !value;
return (myServiceVariable);
},
getValue: function () {
return myServiceVariable;
}
}
}
]);
看起来您有一个输入错误:您正在用
,
而不是分隔这两个函数代码>。改为:
myServiceVariable = false;
setValue: function (value) {
myServiceVariable = !value;
return (myServiceVariable);
};
getValue: function () {
return myServiceVariable;
};
}
另外,由于您将第二个控制器中的值作为函数的返回值,而不是对服务变量本身的直接引用,因此不要期望它自动更新。每次都必须调用getValue()
函数 hi下面的代码应该显示服务在angularjs中是单例的
myApp = angular.module("myApp",[]);
myApp.service("myService", function(){
myServiceVariable = false;
return {
setValue: function (value) {
myServiceVariable = value;
return (myServiceVariable);
},
getValue: function () {
return myServiceVariable;
}
}
});
myApp.controller("controller1", function($scope, myService){
console.log(myService);
$scope.clickHandler = function(){
myService.setValue(!myService.getValue());
}
});
myApp.controller("controller2", function($scope, myService){
console.log(myService);
$scope.getServiceValue = function(){
return myService.getValue();
}
});
对于正在运行的演示,您可以去是的,角度服务是单例的。你的代码一定有问题。粘贴一些代码。:)您是否使用DI在控制器中获取服务?是的,我将服务注入控制器。我已经更新了我的问题。请再次参考。myController2是否与myController1同时初始化?否。。。这将在controller1之后初始化。是的,我每次都调用getValue()。。。更换;相反,不起作用:(@Dosti尝试在getValue()
方法中进行调试?它是否正确地进入函数?@Dosti应该工作正常..尝试放置console.log('init'))
在声明myService变量之前的服务中,让我们看看调用了多少次。我可以在现有代码中看到,controller1、controller2和service的模块名称不同。这是否造成了问题?我更新了代码,以便myService、controller1和controller2都位于3个不同的模块中。所有你需要确定的是你使用的所有模块都包含在你的主代码中。链接到更新的代码。是的,这是同一个代码。在这里,我们同时初始化控制器。考虑如果我从控制器1打开弹出窗口,然后初始化控制器2,并访问GETValueE()。方法。请拿起我共享的小提琴并更新您想要在上面执行的操作。如果问题仍然存在,请在此处共享链接。如果您正在打开一个弹出窗口,则您正在创建一个单独的html页面和一个单独的Angle应用程序。因此,实际上,您的服务将是一个不同的实例,因为它是一个不同的应用程序。您可以使用本地store i如果您正在为modern browser或Cookie创建同一个域,并且您传递的值非常小。其他方面,您可以尝试在弹出窗口中传递应用程序对象。我没有做过类似的操作,因此我不知道它是否有效。