我有一个服务方法,它将更改布尔变量的值(false是默认值)并返回控制器。 我是通过点击按钮调用此服务方法。
考虑一下,点击此按钮,现在变量值为true。 现在,我从另一个控制器访问这个相同的服务方法,它是假的..为什么?
怎么了?
第一个控制器,
.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;
}
}
}
]);
答案 0 :(得分:0)
看起来你有一个拼写错误:你用两个函数分隔,
而不是;
。改为:
myServiceVariable = false;
setValue: function (value) {
myServiceVariable = !value;
return (myServiceVariable);
};
getValue: function () {
return myServiceVariable;
};
}
此外,由于您将第二个控制器中的值作为函数的返回值而不是对服务变量本身的直接引用,因此不要指望它会自动更新。您每次都必须调用getValue()
函数。
答案 1 :(得分:0)
以下代码应显示服务是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();
}
});
对于工作演示,您可以here