2016-08-23 19 views
9

Có thể nhận danh sách tất cả các bộ điều khiển góc mà tôi đã xác định không? Về cơ bản tôi muốn để có thể xác định được files tôi cần phải nhập (những cái tôi đã viết) tùy thuộc vào cái nào được sử dụng. Cách duy nhất tôi có thể nghĩ đến là duyệt qua HTML và tìm tất cả các giá trị được liên kết với ng-controller, nhưng tôi đã tự hỏi liệu có một cách sạch hơn và mạnh mẽ hơn không.Nhận tất cả các bộ điều khiển góc

+0

Tôi rất vui vì bạn đã không đi với ý tưởng ban đầu của bạn bởi vì ... Nếu bạn đi qua thông qua mã HTML bạn sẽ không tìm thấy bất kỳ điều khiển nếu người đang sử dụng ** ui-router ** và 'controllerAs '. – byxor

+0

@BrandonIbbotson Đó là một giải pháp hack trong nhà, và tất cả các bộ điều khiển đều sử dụng 'ng-controller' để nó không quá rắc rối. Tôi biết 'ui-router' nhưng nó không được sử dụng cho việc này. Bất kỳ đề xuất? –

+0

'ngRoute' cũng cho phép xác định bộ điều khiển cho một tệp html cụ thể thành tệp cấu hình js. – nubinub

Trả lời

1

Cố gắng sử dụng _invokeQueue Nó có thể là những gì bạn đang tìm kiếm:

angular.module('MyApp')['_invokeQueue'].forEach(function(val‌​ue){ console.log(value[2][0]) }) 

Các _invokeQueue là dân cư với mỗi dịch vụ mà sẽ được thêm vào các module sử dụng angular.module quen thuộc ('myModule ') .controller, angular.module (' myModule '). chỉ thị et al. cuộc gọi. Mỗi mục trong hàng đợi là một mảng có ba phần tử. Đầu tiên là nhà cung cấp rằng sẽ gọi dịch vụ, thứ hai là phương thức trên nhà cung cấp để sử dụng và yếu tố thứ ba là một mảng của bất kỳ đối số nào được chuyển đến dịch vụ .

Reference

1

Bạn có thể làm như vậy bằng cách sử dụng các _invokeQueue tài sản của các mô-đun như trong this example

var appModule = angular.module('plunker',[]); 

angular.module('plunker').controller('TestCtrl', function(){}); 
angular.module('plunker').controller('TestCtrl2', function(){}); 
angular.module('plunker').controller('MainCtrl', function($scope) { 
    $scope.controllers = appModule._invokeQueue.filter(function(el){ 
     return el[0] === "$controllerProvider"; 
    }).map(function(el){ 
     return el[2]["0"]; 
    }); 
}); 
1

Trong bất kỳ bộ điều khiển hiện tại của bạn, sao chép và dán đoạn mã dưới đây sẽ liệt kê tất cả các bộ điều khiển của bạn.

Lưu ý: Vui lòng thay đổi biến ứng dụng của bạn bằng 'ứng dụng'.

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

angular.element(document).ready(function(){ 
     var values = app._invokeQueue; 
     angular.forEach(values, function(value, key) { 
      if(value[0] == '$controllerProvider'){ 
       console.log(value[2][0]); 
      } 
     }); 
    }); 
Các vấn đề liên quan