Użycie $compile na zewnętrznym szablonie (templateURL) w dyrektywie Angular
Mam rekurencyjną dyrektywę kątową, która używa zmiennej szablonowej i jest kompilowana w funkcji link
.
Problem polega na tym, że mój szablon jest naprawdę długi i wymknął się spod kontroli i chcę go uzewnętrznić w zewnętrznym pliku HTML(ułatwiłoby to również np. automatyczne wcięcie).
Jak można załadować zewnętrzny szablon do dyrektywy, która może być użyta wewnątrz $compile
?
Widziałem templateURL
, ale to nie pozwala mi nazwać zmiennej i przekazać ją do funkcji $compile
.
var template =
"<p>My template</p>"+
"<this-directive val='pass-value'></this-directive>";
return {
scope: {
...
},
...
link: function(scope, element){
element.html(template);
$compile(element.contents())(scope);
}
}
I
2 answers
Możesz użyć usługi $templateRequest
, Aby uzyskać szablon. Jest to wygodna usługa, która również buforuje szablon w $templateCache
, dzięki czemu składa się tylko jedno żądanie do template.html
.
Jako ilustrację (i bez wchodzenia w kwestię dyrektyw rekurencyjnych), używa się tego w następujący sposób:
link: function(scope, element){
$templateRequest("template.html").then(function(html){
var template = angular.element(html);
element.append(template);
$compile(template)(scope);
});
};
Plunker (sprawdź kartę Sieć, aby zobaczyć pojedyncze żądanie sieciowe)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-22 18:12:33
Wolę użyć $http do załadowania szablonu, jeśli jego rozmiar jest Większy: -
$http.get('mytemp.html').then(function(response) {
element.html(response.data);
$compile(element.contents())(scope);
});
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-08 14:07:43