在 Angular 指令中对外部模板 (templateURL) 使用 $compile
Using $compile on external template (templateURL) in Angular directive
我有一个递归 Angular 指令,它使用模板变量并在 link
函数中编译。
问题是,我的模板已经变得非常长并且无法控制,我想将它外部化到外部 HTML 文件中(这也会使它更容易自动缩进)。
如何将外部模板加载到可在 $compile
内部使用的指令中?
我见过 templateURL
,但我无法命名变量并将其传递给 $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);
}
}
和
如果模板较大,我更喜欢使用 $http 加载模板:-
$http.get('mytemp.html').then(function(response) {
element.html(response.data);
$compile(element.contents())(scope);
});
您可以使用$templateRequest
服务获取模板。这是一项便捷服务,它还在 $templateCache
中缓存了模板,因此只向 template.html
发出一个请求。
作为示例(并且不涉及递归指令的问题),它的用法如下:
link: function(scope, element){
$templateRequest("template.html").then(function(html){
var template = angular.element(html);
element.append(template);
$compile(template)(scope);
});
};
plunker(检查网络选项卡以查看单个网络请求)
我有一个递归 Angular 指令,它使用模板变量并在 link
函数中编译。
问题是,我的模板已经变得非常长并且无法控制,我想将它外部化到外部 HTML 文件中(这也会使它更容易自动缩进)。
如何将外部模板加载到可在 $compile
内部使用的指令中?
我见过 templateURL
,但我无法命名变量并将其传递给 $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);
}
}
和
如果模板较大,我更喜欢使用 $http 加载模板:-
$http.get('mytemp.html').then(function(response) {
element.html(response.data);
$compile(element.contents())(scope);
});
您可以使用$templateRequest
服务获取模板。这是一项便捷服务,它还在 $templateCache
中缓存了模板,因此只向 template.html
发出一个请求。
作为示例(并且不涉及递归指令的问题),它的用法如下:
link: function(scope, element){
$templateRequest("template.html").then(function(html){
var template = angular.element(html);
element.append(template);
$compile(template)(scope);
});
};
plunker(检查网络选项卡以查看单个网络请求)