Quello che si desidera è eseguire un'altra istruzione prima che venga chiamato qualsiasi altro, ottenere il nome del controller da qualche modello rimuovere la nuova direttiva e aggiungere la direttiva ng-controller
, quindi ricompilare l'elemento.
che assomiglia a questo:
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);
}
};
}]);
allora si potrebbe utilizzare nel modello, in questo modo:
<div dynamic-ctrl="'blankCtrl'">{{tyler}}</div>
con un controller simile a questo:
global.controller('blankCtrl',['$scope',function(tyler){
tyler.tyler = 'tyler';
tyler.tyler = 'chameleon';
}]);
C'è probabilmente un modo per interpolare il valore ($interpolate
) dello dynamic-ctrl
anziché di ng ($parse
), ma non riuscivo a farlo funzionare per qualche motivo.
fonte
2014-07-25 00:02:02
C'è un controller genitore o è questo il controller più in alto? – tymeJV
numerosi modi per caricare i modelli in base alle condizioni e avere il controller impostato nei modelli – charlietfl
Questo avrebbe un controller principale. – RonSper