2016-04-09 69 views
1

我有一個模塊中定義的值,我在一個控制器中更改。問題在於其他控制器中的值未更新。模塊值未更新

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

回答

4

這是因爲valuenumber這是一個原始類型的類型。

原始類型像字符串,布爾值,數字都是pass by value,這意味着變量值將被複制並傳遞,但不是引用(即指針)。

解決您的問題,您應該從數量變化value的類型提出異議

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

這裏是一個工作的jsfiddle。

http://jsfiddle.net/3puss60r/

每當你面對值不更新的問題,想想都通過引用傳遞的類型,對象和數組。

+0

因此,有參考控制器通過一些沒有原生的方式嗎? – Kolyunya

+0

號碼本身就是原始類型,任何語言的原始類型都會按值傳遞。 – tom10271

+0

明白了!謝謝! – Kolyunya

1

請閱讀關於dependency injection如何在AngularJS中工作的文檔。

您正在向控制器注入值,但值不會發生變化,因爲通過它的ID請求注射器始終會爲相同ID返回相同的值。

你必須使用,

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

這將返回一個命名對象的值,你可以改變「myvalue的」價值。

這裏是工作提琴:http://jsfiddle.net/swxrd4bc/1/