2016-04-09 26 views
1

Ich habe einen Wert in einem Modul definiert, den ich in einem Controller ändere. Das Problem besteht darin, dass der Wert in dem anderen Controller nicht aktualisiert wird.Modulwert wird nicht aktualisiert

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

Der Wert wird nur aus der Sicht des ersten Controllers und nicht des zweiten Controllers geändert. Wie kann ich erzwingen, dass der Wert im zweiten Controller aktualisiert wird? Beispiel fiddle.

Antwort

4

Dies ist, weil value typeof number ist, die ein primitiver Typ ist.

Primitive Typ wie Zeichenfolge, Boolean, Nummer sind alle pass by value, was bedeutet, dass die Variable Wert kopieren und übergeben wird, aber nicht die Referenz (d. H. Zeiger).

Ihr Problem zu lösen, sollten Sie value ‚s Art von Nummer ändern

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

Hier ist ein funktionierendes JSFiddle zu widersprechen.

http://jsfiddle.net/3puss60r/

Jedes Mal, wenn Sie mit dem Problem konfrontiert, dass Wert nicht aktualisiert, denkt über die Art, Objekt- und Array beide durch Verweis übergeben.

+0

So gibt es keine native Möglichkeit eine Reihe mit Bezug auf die Steuerung zu übergeben? – Kolyunya

+0

Nummer selbst ist primitiver Typ, primitiver Typ in jeder Sprache wird nur als Wert übergeben. – tom10271

+0

Verstanden! Vielen Dank! – Kolyunya

1

Bitte lesen Sie die Dokumentation, wie die dependency injection in AngularJS funktioniert.

Sie injizieren Wert in Controller, aber die Werte werden nicht geändert, da die Anforderung eines injizierbaren durch seine ID immer das gleiche für die gleiche ID zurückgibt.

Sie verwenden müssen,

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

Dies ist kehren Sie ein Objekt mit dem Namen Wert, und Sie können den Wert von ‚myValue‘ ändern.

Hier arbeitet Geige: http://jsfiddle.net/swxrd4bc/1/