2014-11-25 12 views
5

değer sağlayıcısının/değişim angularjs değerini nasıl geçersiz kılınır, bazı servis/denetleyici içindeBen zamanında</p> <pre><code>angular.module("data", []).value('apiBase', '/api1/data') </code></pre> <p>değer-geçersiz kılmak istediğiniz

angular.module("data").value('apiBase', '/someotherapi/data') 

Kurun- bunu değiştirmeye çalıştı, ancak Başarısız, apiBase değerini geçersiz kılmadı.

Denetleyiciye apiBase numaralı iğneyi enjekte etmeyi denedim ve değiştirdim. başarısız oldu. O inşaat

angular.module('data').controller(function(apiBase){apiBase.api_base_url = '/someotherapi/data'}) 

:

Sonra
angular.module("data", []).value('apiBase', {"api_base_url":"/api1/data"}) 

durumda kontrol ünitesine değiştirerek gibi bir nesneye apiBase içerikle tanımlar değiştirmek çalıştı. Bu yüzden sorum şu: neden angular.module('data').value('samekey', 'newvalue') değeri geçersiz kılmadı? neden sadece bir dize/sayı olduğunda (birincil tür. Ikinci deneme) değeri değiştiremiyor. Benim görüşüme göre Value sağlayıcısı bekar, değişmelidir.

+0

Bir denetleyici içindeki bir modül düzeyi hizmet/sağlayıcısını/değerini değiştirmek hiç doğru olmaz. Eğer değerin değişmesi gerekiyorsa, onu bir hizmete sarmak ve ayarlayıcı/alıcıya sahip olmak daha kolaydır. Uygulama çalışırken bir singleify'ın üzerine yazılmasına izin vermek mantıklı olmaz. – GillesC

+0

Çalışma aşamasında enjekte edilen bağımlılığın değerini değiştirmek neredeyse doğru bir yaklaşım değildir. Denetleyicileri/hizmetleri/etc arasında geçiş yapmaya çalışıyorsanız, [olayları] kullanmayı düşünün (https://docs.angularjs.org/api/ng/type/$rootScope.Scope#$emit). –

cevap

7

Lütfen, AngularJS'de dependency injection'un nasıl çalıştığı hakkındaki belgeleri okuyun. yapılandırma aşaması ve çalıştırma fazı -

Temel olarak, angularjs uygulaması iki fazda oluşturulur. Tüm .value() kayıtlarını özel $provide hizmetiyle kaydetme gibi tüm yapılandırma kodları yapılandırma aşamasında yapılır. Bu aşama sona erdiğinde, daha fazla yapılandırma yapılamaz ve çalışma aşaması başlar, ana modülünüz DOM'a önyüklenir, denetleyiciler ve hizmetler başlatılır, vb. Bu, bağımlılık enjeksiyonunun aklı başında, deterministik bir şekilde çalışmasına izin verir. (ID ile enjekte edilebilir bir istek istemek her zaman aynı ID için aynı şeyi döndürür).

İlgili konular