2013-07-25 22 views
26

Giả sử tôi có hai mô-đun cho AngularJS, ví dụ: foobar và cả hai người trong số họ xác định dịch vụ được gọi là baz.Làm thế nào để sử dụng hai dịch vụ AngularJS có cùng tên từ các mô-đun khác nhau?

Trong ứng dụng của tôi, tôi phụ thuộc vào chúng bằng cách nói:

var app = angular.module('app', [ 'foo', 'bar' ]); 

Sau đó, tôi có thể thử sử dụng dịch vụ baz trong một bộ điều khiển bằng cách sử dụng

app.controller('blaController', [ '$scope', 'baz', function($scope, baz) { 
    // ... 
}]); 

Làm thế nào tôi có thể định nghĩa nào trong hai dịch vụ tôi muốn sử dụng? Có cái gì đó như một cái tên đủ tiêu chuẩn?

+2

bản sao có thể có của [Cách tham chiếu các giá trị có cùng tên từ các mô-đun khác nhau] (http://stackoverflow.com/questions/15342657/how-to-reference-values-with-the-same-name-from- các module khác) – Stewie

+0

bản sao có thể có của các dịch vụ ["Không gian tên" trong AngularJS] (http://stackoverflow.com/questions/14909474/namespacing-services-in-angularjs) –

+0

bản sao có thể có của [Mô-đun và xung đột tên trong Angularjs] (http://stackoverflow.com/questions/13406791/modules-and-name-clashes-in-angularjs) – shannon

Trả lời

37

Công cụ định vị dịch vụ trông các dịch vụ theo tên (angularjs guide DI). Tuy nhiên "Namespacing" services in AngularJS:

Tính đến AngularJS ngày nay không xử lý va chạm không gian tên cho các dịch vụ vì vậy nếu bạn đã có 2 mô-đun khác nhau với các dịch vụ có tên giống nhau cách và bạn bao gồm cả các module trong ứng dụng của bạn, chỉ có một dịch vụ sẽ có sẵn .

Tôi đoán bạn có thể làm cho tên đầy đủ "bằng tay": đặt tên cho dịch vụ foo.bazbar.baz thay vì đơn giản baz. Đó là một loại tự ảo tưởng. Hơn nữa, viết theo cách này không làm cho việc đặt tên thật, nhưng một người khác đọc mã có thể nghĩ như vậy.

+1

Tôi quên đề cập đến rằng bạn có thể giảm thiểu điều này với các đóng cửa '(function() {module declaration}());' –

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