To, co chcesz zrobić, to uruchomić inną dyrektywę, zanim cokolwiek innego zostanie wywołane, pobierz nazwę kontrolera z jakiegoś modelu, usuń nową dyrektywę i dodaj dyrektywę ng-controller
, a następnie ponownie skompiluj element.
To wygląda następująco:
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);
}
};
}]);
Następnie można używać go w szablonie tak:
<div dynamic-ctrl="'blankCtrl'">{{tyler}}</div>
z kontrolerem jak ten:
global.controller('blankCtrl',['$scope',function(tyler){
tyler.tyler = 'tyler';
tyler.tyler = 'chameleon';
}]);
tam prawdopodobnie sposób interpolacji wartości ($interpolate
) z dynamic-ctrl
zamiast parsi ng it ($parse
), ale nie mogłem go uruchomić z jakiegoś powodu.
Czy istnieje kontroler nadrzędny lub czy jest to najbardziej kontroler najwyższy? – tymeJV
liczne sposoby ładowania szablonów na podstawie warunków i ustawienia kontrolera w szablonach – charlietfl
To byłby kontroler nadrzędny. – RonSper