AngularJS module.constant
không định nghĩa một hằng số theo nghĩa chuẩn.
Mặc dù nó đứng riêng như một cơ chế đăng ký của nhà cung cấp, nhưng nó được hiểu rõ nhất trong ngữ cảnh của hàm module.value
( $provide.value
) có liên quan . Tài liệu chính thức nêu rõ trường hợp sử dụng:
Đăng ký một dịch vụ giá trị với $ kim phun, chẳng hạn như chuỗi, số, mảng, đối tượng hoặc hàm. Đây là viết tắt của việc đăng ký một dịch vụ trong đó tài sản $ get của nhà cung cấp là một chức năng của nhà máy không có đối số và trả về dịch vụ giá trị. Điều đó cũng có nghĩa là không thể tiêm các dịch vụ khác vào một dịch vụ giá trị.
So sánh điều này với tài liệu cho module.constant
( $provide.constant
) cũng nêu rõ trường hợp sử dụng (nhấn mạnh của tôi):
Đăng ký một dịch vụ không đổi với $ kim phun, chẳng hạn như chuỗi, số, mảng, đối tượng hoặc hàm. Giống như giá trị, không thể tiêm các dịch vụ khác vào một hằng số. Nhưng không giống như giá trị, một hằng số có thể được đưa vào một hàm cấu hình mô-đun (xem angular.Module) và nó không thể bị ghi đè bởi một trình trang trí AngularJS .
Do đó, constant
hàm AngularJS không cung cấp một hằng số theo nghĩa thông thường được hiểu của thuật ngữ trong lĩnh vực này.
Điều đó nói rằng các hạn chế được đặt trên đối tượng được cung cấp, cùng với tính khả dụng trước đó của nó thông qua trình tiêm $, rõ ràng gợi ý rằng tên này được sử dụng bởi sự tương tự.
Nếu bạn muốn một hằng số thực tế trong ứng dụng AngularJS, bạn sẽ "cung cấp" một cách giống như bạn làm trong bất kỳ chương trình JavaScript nào
export const π = 3.14159265;
Trong Angular 2, kỹ thuật tương tự được áp dụng.
Các ứng dụng Angular 2 không có giai đoạn cấu hình theo nghĩa tương tự như các ứng dụng AngularJS. Hơn nữa, không có cơ chế trang trí dịch vụ ( AngularJS Decorator ) nhưng điều này không đặc biệt đáng ngạc nhiên khi chúng khác nhau như thế nào.
Ví dụ về
angular
.module('mainApp.config', [])
.constant('API_ENDPOINT', 'http://127.0.0.1:6666/api/');
là tùy ý mơ hồ và hơi lạc quan vì $provide.constant
đang được sử dụng để chỉ định một đối tượng tình cờ cũng là một hằng số. Bạn cũng có thể đã viết
export const apiEndpoint = 'http://127.0.0.1:6666/api/';
cho tất cả hoặc có thể thay đổi.
Bây giờ, đối số cho khả năng kiểm tra, chế nhạo hằng số, bị giảm đi vì nó thực sự không thay đổi.
Người ta không chế nhạo π.
Tất nhiên ngữ nghĩa cụ thể của ứng dụng của bạn có thể là điểm cuối của bạn có thể thay đổi hoặc API của bạn có thể có cơ chế chuyển đổi dự phòng không minh bạch, do đó, sẽ rất hợp lý khi điểm cuối API thay đổi trong một số trường hợp nhất định.
Nhưng trong trường hợp đó, việc cung cấp nó dưới dạng chuỗi đại diện theo nghĩa đen của một URL duy nhất cho constant
hàm sẽ không hoạt động.
Một lập luận tốt hơn và có khả năng phù hợp hơn với lý do tồn tại của $provide.constant
hàm AngularJS là, khi AngularJS được giới thiệu, JavaScript không có khái niệm mô-đun chuẩn . Trong trường hợp đó, toàn cầu sẽ được sử dụng để chia sẻ các giá trị, có thể thay đổi hoặc không thay đổi và sử dụng toàn cầu là vấn đề.
Điều đó nói rằng, cung cấp một cái gì đó như thế này thông qua một khung làm tăng khớp nối với khung đó. Nó cũng trộn lẫn logic cụ thể Angular với logic sẽ hoạt động trong bất kỳ hệ thống nào khác.
Đây không phải là một cách tiếp cận sai hay có hại, nhưng cá nhân tôi, nếu tôi muốn có một hằng số trong ứng dụng Angular 2, tôi sẽ viết
export const π = 3.14159265;
giống như tôi đã sử dụng AngularJS.
Càng nhiều thứ thay đổi ...
AppSettings
lớp yout nên trừu tượng vàAPI_ENDPOINT
thành viên nên đượcreadonly
.