模块值未更新

时间:2016-04-09 18:20:08

标签: angularjs variables

我在一个模块中定义了一个值,我在一个控制器中进行了更改。问题是该值未在其他控制器中更新。

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

2 个答案:

答案 0 :(得分:4)

这是因为valuenumber的typeof类型。

原始类型如string,boolean,number都是pass by value,这意味着变量值将被复制并传递但不是引用(即指针)。

要解决您的问题,您应该将value的类型从数字更改为对象

app.value('value', {val: 0});

这是一个有效的JSFiddle。

http://jsfiddle.net/3puss60r/

每当您遇到值未更新的问题时,请考虑类型,对象和数组都是通过引用传递的。

答案 1 :(得分:1)

请阅读有关dependency injection如何在AngularJS中工作的文档。

您正在控制器中注入值,但值不会更改,因为通过它的ID请求注入始终为相同的ID返回相同的内容。

你必须使用,

BaseController

这将返回一个名为value的对象,您可以更改'myValue'的值。

这是工作小提琴:http://jsfiddle.net/swxrd4bc/1/