E 'possibile, ma quando il modello per essere caricato dipende da alcuni dati di ambito non è più possibile utilizzare la proprietà templateUrl
della direttiva e sarà necessario utilizzare l'API di livello inferiore, ovvero $http
e $compile
.
Circa Quello che dovete fare (possibile solo in funzione di collegamento) è quello di recuperare il contenuto del modello utilizzando $http
(non dimenticate di coinvolgere $templateCache
!) E quindi compilare il contenuto del modello "manualmente".
Potrebbe sembrare che sia molto lavoro, ma in pratica è piuttosto semplice. Suggerirei di dare un'occhiata alla direttiva ngInclude
sources in cui viene utilizzato questo modello.
Ecco uno scheletro di una tale direttiva:
app.directive('boom', function($http, $templateCache, $compile, $parse) {
return {
restrict: 'E',
link: function(scope , iElement, iAttrs) {
var boom = $parse(iAttrs.data)(scope);
$http.get('myTemplate'+boom, {cache: $templateCache}).success(function(tplContent){
iElement.replaceWith($compile(tplContent)(scope));
});
}
}
});
supponendo che sarebbe stato utilizzato come <boom data='name'></boom>
. Lavoro plunk qui: http://plnkr.co/edit/TunwvhPPS6MdiJxpNBg8?p=preview
Si prega di notare che ho modificato la valutazione degli attributi da {{name}}
agli attributi di analisi poiché probabilmente un modello dovrebbe essere determinato solo una volta, all'inizio.
fonte
2013-01-31 18:09:04
sì, sto cercando di giocare con ngInclude, ma io non posso f ind come ottenere il valore della variabile locale. Come ottenere 'dati' nel mio caso? Sto provando attrs.data, ma restituisce 'undefined' – Agzam
Fornito maggiori informazioni. Non sono sicuro se vuoi davvero utilizzare l'interpolazione dei tuoi attributi poiché significherebbe che il modello può cambiare dinamicamente come parte del ciclo $ digest. Ma se vuoi davvero farlo dovresti $ osservare gli attributi. –
Risolto anche il mio problema. Grazie! – OpherV