2016-04-09 22 views
1

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); 
    }; 
    } 
]); 

この値は、最初のコントローラの観点からのみ変更されており、2番目のコントローラでは変更されていません。 2番目のコントローラで値を強制的に更新するにはどうすればよいですか?例fiddle

答えて

4

valueは、プリミティブタイプのnumberであるからです。

string、boolean、numberのようなプリミティブ型はすべてpass by valueです。つまり、変数の値がコピーされて渡されますが、参照(つまりポインタ)は渡されません。

はあなたの問題を解決するために、あなたはここで

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

作業JSFiddleあるオブジェクト数字からvalueの種類を変更する必要があります。あなたは値が更新されない問題に直面するたびに

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/

関連する問題