2015-05-19 12 views
46

Soweit ich die Dokumentation verstehe, besteht der einzige konkrete Unterschied zwischen einer Konstanten und einem Wert darin, dass eine Konstante während der Konfigurationsphase der App verwendet werden kann, während ein Wert nur während der Ausführungsphase verfügbar ist.AngularJS: Konstanten gegen Werte

Ich bin neugierig, warum Werte in diesem Fall überhaupt benötigt werden? Sind das nicht wirklich beschränkte Konstanten?

+0

großes Tutorial http://ilikekillnerds.com/2014/11/constants-values-global-variables-in-angularjs-the-right-way/ – vineet

Antwort

71

Eine Konstante kann injiziert werden überall.

Eine Konstante kann von einem Dekorierer nicht abgefangen werden, , dh der Wert einer Konstante sollte niemals geändert werden.

var app = angular.module('app', []); 

app.constant('PI', 3.14159265359); 

app.config(function(PI){ 
    var radius = 4; 
    //PI can be injected here in the config block 
    var perimeter = 2 * PI * radius; 
}); 

app.controller('appCtrl', function(PI) { 
    var radius = 4; 
    // calculate area of the circle 
    var area = PI * radius * radius; 
}); 

Wert unterscheidet sich von Konstante in diesem Wert kann nicht in Konfigurationen, injiziert werden aber es kann durch Dekorateure abgefangen werden.

var app = angular.module('app', []); 

app.value('greeting', 'Hello'); 

app.config(function ($provide) { 
    $provide.decorator('greeting', function ($delegate) { 
     return $delegate + ' World!'; 
    }); 
}); 
+1

Es sieht aus wie die Sprache, das gleiche ist wie dieser Kernpunkt. https://gist.github.com/demisx/9605099 Die Codebeispiele hier sind besser und illustrieren die Sprache.Ich werde einen Edit vorschlagen, der ein Beispiel für die Sprache "Eine Konstante kann überall eingefügt werden" hinzufügt - und impliziert durch "ein Wert kann nicht in Konfigurationen eingefügt werden", indem die in der app.config verwendete Konstante wie gezeigt angezeigt wird. hier] (http://stackoverflow.com/q/28416054/1175496) –

+0

Was bedeutet es, dass der Wert "kann nicht in Konfigurationen injiziert werden"? irgendein Beispiel? –

+1

@VasylGutnyk es bedeutet, dass * Werte * sind nicht verfügbar während * Konfigurationsphase * und Sie können es nicht injizieren "app.config" -Funktion –

0

Der Unterschied zwischen Wert und konstanten ist, dass ein Wert mit spezifizierten konstanten während der Konfigurationsphase zur Verfügung steht.

Nun ist es das gleiche für Wert und Konstante. Konstante ist in der Konfigurationsphase verfügbar und Wert ist nicht.

Der andere Unterschied ist, wie der Name andeutet, dass Sie den Wert einer Konstante nicht ändern können. Der erste Wert, den Sie ihm zuweisen, ist der Wert, den er behält. Wenn Sie ihm später einen anderen Wert zuweisen, wird er ignoriert.

Hier ist ein Beispiel:

mod.value("myValue", "First Assignment"); 

mod.value("myValue", "Second Assignment"); 

mod.constant("myConstant", "First Assignment"); 

mod.constant("myConstant", "Second Assignment"); 

mod.controller("MyController", function(myValue, myConstant) { 

    console.log("myValue: " + myValue); 

    console.log("myConstant: " + myConstant); 
}); 

Console Ausgabe:

myValue: Second Assignment 

myConstant: First Assignment 
0

Es stimmt, hält jedoch daran, wenn Sie ein Objekt als eine Konstante verwenden, kann ihr Wert jederzeit außer Kraft gesetzt werden, irgendwo. Zum Beispiel

const version = '10.0' 

kann nicht geändert werden, wenn Sie einen Blick auf die Konsole nehmen Sie es sogar einen Fehler wirft, wenn sein Wert ändert, aber

const config = { 
    'version': '8.6' 
} 

verhält sich wie ein einfacher Wert, können Sie die Änderung die Objektwerte zu jeder Zeit, wie folgt aus:

config.version = 5 

tada, jetzt Ihre Version ist 5. Gleiches gilt für app.const('constant', 'its me')

Verwandte Themen