2015-06-01 10 views
6

Tôi gặp 3 module trong AngularJS tôi App, ví dụ main, homeproduct. main mô-đun có homeproduct mô-đun như phụ thuộc (ng.module('main', ['home', 'product'])) trong khi homeproduct module không có bất kỳ phụ thuộc (ng.module('product', [])ng.module('phome', [])), vẫn product mô-đun có thể truy cập dịch vụ home module? TẠI SAO???Tại sao 2 Module khác nhau có thể truy cập lẫn nhau khi được thêm vào phụ thuộc vào module thứ ba?

Dưới đây là mẫu mã của ứng dụng của tôi, mà là có kịch bản tương tự và cùng một vấn đề. Và đây là JSfiddle Link.

<!DOCTYPE html> 
<html ng-app="main"> 
<body ng-controller="MainController as mainController"> 
{{mainController.name}} 
<script type="application/javascript" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular.min.js"></script> 
<script> 
(function (ng) { 
    var homeModule = ng.module('home', []); 
    homeModule.service("HomeService", [function() { 
     var homeService = this; 
     homeService.getName = function() { 
      return "Home Service"; 
     } 
    }]); 
    var productModule = ng.module('product', []); 
    productModule.service("ProductService", ["HomeService", function (HomeService) { 
     var productService = this; 
     productService.getName = function() { 
      return "Product Service - " + HomeService.getName(); 
     }; 
    }]); 
    var mainModule = ng.module('main', ['home', 'product']); 
    mainModule.controller("MainController", ['ProductService', function (ProductService) { 
     var mainController = this; 
     mainController.name = ProductService.getName(); 
    }]); 
})(angular); 
</script> 
</body> 
</html> 
+1

Điều này là do dịch vụ nhà được định nghĩa là một biến toàn cầu có thể được truy cập từ bất cứ nơi nào trong ứng dụng. Thử đọc http://tutorials.jenkov.com/angularjs/dependency-injection.html để biết thêm thông tin. – vipulsharma

Trả lời

3

Câu trả lời khá đơn giản. Góc không phạm vi nội dung của một mô-đun cho chính mô đun đó. Tôi đã đọc ở đâu đó rằng đã có các cuộc thảo luận về việc thêm chức năng này, nhưng tôi chưa thấy nó được thực hiện.

Để làm cho vấn đề tồi tệ hơn, các bộ điều khiển áp dụng cho một mô-đun nhập khẩu sẽ là duy nhất trong ứng dụng của bạn. Ví dụ, tôi đã từng sử dụng bootstrap góc-ui và ai đó trong nhóm của tôi đã thêm AlertController. Chúng tôi khá bối rối khi bộ điều khiển không bao giờ bị trúng, nhưng đó là bởi vì angular-ui đã định nghĩa bộ điều khiển.

Vì vậy, nó không phải chỉ là vấn đề tầm nhìn, mà còn bảo trì và đặt tên.

Mọi thứ được xác định trên mô-đun là công khai.

+0

Điều này thật khủng khiếp. May mắn sau 1,5 năm của angular'ing, tôi chưa chạy vào vấn đề này. – mmmeff

+0

Tôi dường như nhớ lại tiêu chuẩn 'NameCtrl' đến từ vấn đề này, để tránh xung đột với' NameController' từ thư viện của bên thứ ba. Nó đã thực sự đánh nhóm của tôi ba hoặc bốn lần cho đến khi chúng tôi tuyên bố theo quy ước 'NameCtrl'. –

0

Nó hoạt động vì sự phụ thuộc của home mô-đun được thêm vào các module main và như main chỉ được gọi product service do đó nó phải được chỉ phụ thuộc vào product module.

Nếu bạn xóa mô hình home phụ thuộc mô-đun, mô-đun main (trường hợp này) sẽ ngừng hoạt động.

TLDR; Phía xuống không thêm home phụ thuộc vào product mô-đun là nó sẽ không làm việc bằng cách chỉ thêm sự phụ thuộc sản phẩm nhưng bạn phải thêm home phụ thuộc cũng như để làm việc với product service.

jsfiddle

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