2015-05-19 14 views
46

O ile rozumiem dokumentację, jedyną konkretną różnicą między wartością stałą a wartością jest to, że w fazie konfiguracji aplikacji można użyć stałej, podczas gdy wartość jest dostępna tylko podczas fazy uruchamiania.AngularJS: Constants vs Values ​​

Jestem ciekawy, dlaczego w ogóle potrzebne są wartości? Czy oni tak naprawdę nie ograniczają tylko stałych?

+0

wielki poradnik http://ilikekillnerds.com/2014/11/constants-values-global-variables-in-angularjs-the-right-way/ – vineet

Odpowiedz

71

Stała może być wstrzyknięta gdziekolwiek.

Stała nie może zostać przechwycona przez dekorator, , co oznacza, że ​​wartość stałej nigdy nie powinna być zmieniana.

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

wartość różni się od tej wartości stałej w nie może być wstrzyknięty do konfiguracji, ale może zostać przechwycone przez dekoratorów.

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

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

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

Wygląda jak język jest taki sam jak ten sens. https://gist.github.com/demisx/9605099 Przykłady kodu są tutaj lepsze i ilustrują język.Zaproponuję edycję, która dodaje przykład języka "stała może być wstrzykiwana gdziekolwiek" - i sugerowana przez "wartość nie może być wstrzyknięta do konfiguracji", pokazując stałą używaną w app.config, jak pokazano [ tutaj] (http://stackoverflow.com/q/28416054/1175496) –

+0

Co to znaczy, że "nie można wprowadzić wartości do konfiguracji"? dowolny przykład? –

+1

@VasylGutnyk oznacza, że ​​* wartości * nie są dostępne podczas * fazy konfiguracji * i nie można go wprowadzić do funkcji 'app.config'. –

0

Różnica wartości i stałej jest to, że podana wartość stosując stały jest dostępny na etapie konfiguracji.

Cóż, to samo dla wartości o wartości i stała. stała jest dostępna od fazy konfiguracji i wartość nie jest.

Inna różnica jest taka, jak sama nazwa wskazuje, że nie można zmienić wartości stałej. Pierwsza przypisana wartość jest wartością, którą zachowuje, jeśli spróbujesz przypisać jej inną wartość, później zostanie zignorowana.

Oto przykład:

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

wyjście konsoli:

myValue: Second Assignment 

myConstant: First Assignment 
0

To prawda, jednak należy pamiętać, jeśli użyć obiektu jako stała, jego wartość może być zmieniona w dowolnym czasie, gdziekolwiek. Na przykład

const version = '10.0' 

nie może być zmieniony, jeśli spojrzeć na konsoli to nawet zgłasza błąd podczas zmiany jego wartości, ale

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

zachowuje się jak proste wartości, można zmienić w każdej chwili wartości obiektu, na przykład:

config.version = 5 

Tada, teraz twoja wersja jest 5. samo dotyczy app.const('constant', 'its me')

Powiązane problemy