angularjs en module.constant standart anlamda bir sabit tanımlamaz.
Bir sağlayıcı kayıt mekanizması olarak kendi başına dursa da, en iyi ilgili module.value( $provide.value) işlevi bağlamında anlaşılır . Resmi belgeler kullanım durumunu açıkça belirtmektedir:
$ Enjektörüyle dize, sayı, dizi, nesne veya işlev gibi bir değer hizmeti kaydedin. Bu, sağlayıcının $ get özelliğinin argüman almayan ve değer hizmetini döndüren bir fabrika işlevi olduğu bir hizmeti kaydettirmek için kısadır. Bu aynı zamanda bir değer hizmetine başka hizmetlerin enjekte edilmesinin mümkün olmadığı anlamına da gelir.
Bunu , kullanım durumunu da açıkça ifade eden module.constant( $provide.constant) için olan dokümanlarla karşılaştırın (benimkini vurgulayın):
$ Enjektör ile dize, sayı, dizi, nesne veya işlev gibi sabit bir hizmet kaydedin. Değer gibi, diğer hizmetleri de bir sabite enjekte etmek mümkün değildir. Ancak değerden farklı olarak, bir sabit bir modül yapılandırma işlevine enjekte edilebilir (bkz. Açısal. Modül) ve bir AngularJS dekoratörü tarafından geçersiz kılınamaz .
Bu nedenle, AngularJS constantişlevi, alandaki terimin yaygın olarak anlaşılan anlamında bir sabit sağlamaz.
Bununla birlikte, sağlanan nesneye getirilen kısıtlamaların, $ enjektör aracılığıyla daha önceki kullanılabilirliği ile birlikte, adın analoji tarafından kullanıldığını açıkça göstermektedir.
Bir AngularJS uygulamasında gerçek bir sabit istiyorsanız, herhangi bir JavaScript programında yaptığınız gibi "sabit" olursunuz.
export const π = 3.14159265;
Açısal 2'de aynı teknik uygulanabilir.
Açısal 2 uygulamalarının, AngularJS uygulamalarıyla aynı anlamda bir yapılandırma aşaması yoktur. Ayrıca, hizmet dekoratör mekanizması ( AngularJS Dekoratör ) yoktur, ancak birbirlerinden ne kadar farklı oldukları göz önüne alındığında bu özellikle şaşırtıcı değildir.
Örneği
angular
.module('mainApp.config', [])
.constant('API_ENDPOINT', 'http://127.0.0.1:6666/api/');
tesadüfen de sabit $provide.constantolan bir nesneyi belirtmek için kullanıldığından , belirsiz bir şekilde keyfi ve biraz rahatsız edici . Sen de yazmış olabilirsin
export const apiEndpoint = 'http://127.0.0.1:6666/api/';
çünkü her ikisi de değişebilir.
Artık sabitle alay eden test edilebilirlik argümanı azalıyor çünkü tam anlamıyla değişmiyor.
Kişi alay etmez π.
Elbette uygulamaya özgü anlambiliminiz uç noktanızın değişebileceği veya API'nizin saydam olmayan bir yük devretme mekanizmasına sahip olabileceğinden, API uç noktasının belirli koşullar altında değişmesi mantıklı olacaktır.
Ancak bu durumda, constantişlev için tek bir URL'nin dize hazır gösterimi sağlamak işe yaramazdı.
Daha iyi bir argüman ve muhtemelen bir tane daha AngularJS $provide.constantişlevinin varlığının nedeni ile uyumludur, AngularJS tanıtıldığında JavaScript'in standart modül kavramı yoktur . Bu durumda, genel değerler değişebilir veya değişmez değerleri paylaşmak için kullanılır ve genel değerleri kullanmak sorunludur.
Bununla birlikte, böyle bir şeyin bir çerçeve yoluyla sağlanması, o çerçeveye bağlanmayı arttırır. Ayrıca açısal spesifik mantığı başka herhangi bir sistemde çalışacak mantıkla karıştırır.
Bu yanlış veya zararlı bir yaklaşım demek değildir, ancak kişisel olarak, Açısal 2 uygulamasında bir sabit istiyorsam , yazacağım
export const π = 3.14159265;
tıpkı AngularJS kullandığım gibi.
Daha fazla şey değişir ...
AppSettingssınıfınız soyutAPI_ENDPOINTolmalı ve üye olmalıreadonly.