我在一个模块中定义了一个值,我在一个控制器中进行了更改。问题是该值未在其他控制器中更新。
var app = angular.module('app',[]);
app.value('value', 0);
app.controller('AdditionController', [
'value',
function (value) {
this.add = function (ammount) {
console.log('Value was equal to ' + value);
value += ammount;
console.log('Value no equals to ' + value);
};
}
]);
app.controller('PrintingController', [
'value',
function (value) {
this.print = function () {
console.log('Printer thinks that the value equals ' + value);
};
}
]);
仅从第一个控制器而不是第二个控制器的角度更改该值。如何强制在第二个控制器中更新值?示例fiddle。
答案 0 :(得分:4)
这是因为value
是number
的typeof类型。
原始类型如string,boolean,number都是pass by value
,这意味着变量值将被复制并传递但不是引用(即指针)。
要解决您的问题,您应该将value
的类型从数字更改为对象
app.value('value', {val: 0});
这是一个有效的JSFiddle。
每当您遇到值未更新的问题时,请考虑类型,对象和数组都是通过引用传递的。
答案 1 :(得分:1)
请阅读有关dependency injection如何在AngularJS中工作的文档。
您正在控制器中注入值,但值不会更改,因为通过它的ID请求注入始终为相同的ID返回相同的内容。
你必须使用,
BaseController
这将返回一个名为value的对象,您可以更改'myValue'的值。
这是工作小提琴:http://jsfiddle.net/swxrd4bc/1/