2014-04-30 16 views
15

Tôi có hai tệp mà tôi xác định dịch vụ trong ứng dụng góc của mình, nhưng khi tôi cố gắng sử dụng chúng trong chỉ thị của mình, tôi gặp lỗi cho bất kỳ chỉ thị nào tôi xác định thứ hai. Có vẻ như một dịch vụ đang ghi đè lên một dịch vụ khác. Nếu tôi thay đổi định nghĩa mô-đun trong service2.js thành myapp.services2, thì nó hoạt động. Tôi nghĩ tôi có thể thêm nhiều nhà máy vào cùng một mô-đun theo cách này. Ai đó có thể chỉ ra những gì tôi đang làm không chính xác?angularjs xác định các dịch vụ cho cùng một mô-đun trong các tệp khác nhau

service1.js:

var services = angular.module('myapp.services',[]); 
services.factory('Service1', function() { 
    // service code 
}); 

service2.js:

var services = angular.module('myapp.services',[]); 
services.factory('Service2', function() { 
    // service code 
}); 

mydirective.js:

angular.module('myappdirective', []).directive('myapp', ['Service1', 'Service2', 
function(service1,service2) { 
    // directive code 
}]); 
+0

Bạn đang xác định mô-đun dịch vụ hai lần. Bạn chỉ cần xác định nó một lần (trong một tệp). Trong dự án gần đây nhất của tôi, tôi đã chuyển dòng var services = angular.module vào tệp js của chính nó (quá mức cần thiết). – aet

+0

không nên tìm kiếm nó lần thứ hai và không xác định lại nó? –

+0

Nếu bạn loại bỏ các mảng tiêm Tôi nghĩ rằng nó sẽ làm việc theo cách đó - angular.module ('myapp.services'); – aet

Trả lời

44

Đây là từ các tài liệu:

B eware sử dụng angular.module ('myModule', []) sẽ tạo mô-đun myModule và ghi đè lên bất kỳ mô-đun hiện có nào có tên myModule. Sử dụng angular.module ('myModule') để lấy ra một module hiện có.

Tìm thấy ở đây: https://docs.angularjs.org/guide/module

+16

Vui về cách triển khai hiện tại gây nhầm lẫn với hầu hết mọi người. 'angular.createModule (, ), angular.retrieveModule ()' sẽ không tăng quá nhiều câu hỏi! ;) Ngoài ra việc thêm '[]' do nhầm lẫn là rất khó để phát hiện – Mirko

+1

Tôi nghĩ nó khá rõ ràng. Tôi đã từng làm việc với JQuery, vì vậy những thứ như '.width()' so với '.width (newWidth)' khá tầm thường, ít nhất là đối với tôi. Bên cạnh đó, nó sẽ chỉ làm bạn ngạc nhiên một lần. Lần sau khi bạn nhìn thấy một lỗi phun cho bạn biết rằng các mô-đun không thể được tìm thấy bạn sẽ biết bạn đã làm nó một lần nữa;) – tfrascaroli

0

này là có thể, tuy nhiên sẽ dễ bị lỗi, do đó không được khuyến khích

Hãy thay đổi nhỏ với những gì bạn đã làm

Chỉ cần đừng tái khai báo biến mô-đun trong các tệp khác ngoài service1.js hoặc đặt định nghĩa mô-đun vào tệp của riêng nó và bao gồm các tệp JS này theo thứ tự của Module.js, services.js, directive.js sau đó nó sẽ hoạt động

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