2013-03-01 25 views
7

Tôi đang làm việc để thiết lập các tệp cấu hình trong AngularJS. Có thể tạo ra một nhà máy ở AngularJS có khóa không thể được ghi đè không? Ví dụ: tôi có thể thiết lập một hằng số như thế này, không thể ghi đè số nàyAngularJS "Hằng số" Nhà máy

module.constant ('animals', {"cat": "meow", "dog": "woof"});

Nhưng tôi muốn làm một cái gì đó như thế này cho phép ghi đè giá trị nhưng không phải là nhà máy riêng của mình

module.value('catSound','meow') 
     .value('dogSound','woof') 
     .factory('animals', ['catSound','dogSound', function(catSound, dogSound) { 
      return { 
       "cat": catSound, 
       "dog": dogSound 
      } 
     }); 

Nhà máy trên có thể được ghi đè cho phép một đoạn mã để có module.factory('animals',function(){ return 7 }) và phá vỡ mọi thứ. Tuy nhiên, với tư cách là một nhà máy, các giá trị riêng lẻ có thể (và phải) có thể ghi đè, vì vậy tôi có thể chỉ định module.value('catSound','hiss') và mọi thứ vẫn hoạt động như mong đợi.

Tôi đã thử tiêm vào các hằng số, nhưng theo như tôi đã có thể hiểu rằng điều đó là không thể. Làm thế nào tôi có thể ngăn chặn việc khai báo nhà máy của tôi khỏi bị ghi đè? Tôi nhận thấy rằng hằng số có lẽ không phải là thuật ngữ chính xác khi mô tả những gì tôi muốn, nhưng tôi muốn chức năng của nhà máy định nghĩa là không đổi.

+0

Bạn có thể cung cấp một chút thông tin chi tiết về trường hợp sử dụng của mình không? Các nhà máy ghi đè cung cấp các lợi ích tuyệt vời, ví dụ như để chế nhạo các thử nghiệm. –

+0

Về cơ bản, tôi chỉ đang cố gắng thiết lập một tệp cấu hình mặc định có thể được sao chép và có các thông số được sửa đổi để phù hợp với nhu cầu của từng máy chủ riêng lẻ (nghĩa là, chúng tôi sẽ muốn URL API trỏ tới API phát triển theo mặc định) máy chủ sản xuất, chúng tôi sẽ muốn nó trỏ đến API sản xuất). Ý tưởng là duy trì _all_ của các giá trị cấu hình trong một tệp để làm cho việc cập nhật các giá trị mặc định đơn giản, trong khi ngăn chặn các nhà phát triển vô tình thay đổi đầu ra của nhà máy trong cấu hình cục bộ của họ. 'value()' sẽ cho phép các thay đổi riêng lẻ. Tôi chắc rằng có một phương pháp tốt hơn –

+0

Bạn đã bao giờ tìm ra giải pháp cho vấn đề của mình chưa? Tôi đang đối phó với cùng một vấn đề vào lúc này. –

Trả lời

2

Mọi thứ đều có thể thay đổi được trong javascript, vì vậy việc thiết lập nội dung nào đó như thế này là khó khăn và không bao giờ hoàn toàn không an toàn. Tôi đã nhìn xung quanh trong mã góc và không tìm thấy bằng chứng về bất kỳ nỗ lực nào tại một cơ chế bảo vệ giống như bạn đang yêu cầu.

Lời khuyên của tôi là chỉ sống với rủi ro. Nó không phải là giá trị cố gắng để bảo vệ mình khác hơn là với các bài kiểm tra và tên dài đẹp. Tôi cho rằng bạn đã bị cắn một lần, nhưng tôi nghĩ rằng cơ hội là khá thấp, trừ khi bạn xác định các nhà máy có tên rất ngắn.

+2

Được cấp, nhưng những thứ như 'Object.seal()' và những người định cư có thể cung cấp một mức độ bảo vệ. 'module.constant()' ngăn các mục bị ghi đè bằng cách sử dụng cùng một phương thức nhiều hơn một lần, vì vậy tôi đã hy vọng một cái gì đó tương tự đã có sẵn cho các định nghĩa 'module.factory()'. –

+0

@IanHunter có, đã đồng ý. Tôi không nghĩ rằng có bất cứ điều gì tại chỗ ngay bây giờ mặc dù, vì vậy bạn hoặc phải làm điều đó cho mình hoặc sống mà không có ... – iwein

Các vấn đề liên quan