Những gì bạn muốn làm là chạy lệnh khác trước khi bất kỳ điều gì khác được gọi, lấy tên bộ điều khiển từ một số mô hình loại bỏ chỉ thị mới và thêm chỉ thị ng-controller
, sau đó biên dịch lại phần tử.
Đó trông như thế này:
global.directive('dynamicCtrl', ['$compile', '$parse',function($compile, $parse) {
return {
restrict: 'A',
terminal: true,
priority: 100000,
link: function(scope, elem) {
var name = $parse(elem.attr('dynamic-ctrl'))(scope);
elem.removeAttr('dynamic-ctrl');
elem.attr('ng-controller', name);
$compile(elem)(scope);
}
};
}]);
Sau đó, bạn có thể sử dụng nó trong mẫu của bạn, như vậy:
<div dynamic-ctrl="'blankCtrl'">{{tyler}}</div>
với một bộ điều khiển như thế này:
global.controller('blankCtrl',['$scope',function(tyler){
tyler.tyler = 'tyler';
tyler.tyler = 'chameleon';
}]);
Có lẽ một cách nội suy giá trị ($interpolate
) của số dynamic-ctrl
thay vì phân tích cú pháp ng nó ($parse
), nhưng tôi không thể làm cho nó hoạt động vì một lý do nào đó.
Nguồn
2014-07-25 00:02:02
Có bộ điều khiển gốc hay đây là bộ điều khiển cao nhất không? – tymeJV
nhiều cách tải mẫu dựa trên điều kiện và có bộ điều khiển được đặt trong các mẫu – charlietfl
Điều này sẽ có bộ điều khiển chính. – RonSper