我想创建一个基于上下文参数动态加载不同模板的 div:
我的“搜索结果容器”指令:
app.directive("searchResultsContainer", function() {
restrict: "E",
templateUrl: "search-results-container.html",
controller: function($scope) {
$scope.templates = [
{ viewmode: "list", url: "search-results-list-view.html" },
{ viewmode: "grid", url: "search-results-grid-view.html" },
{ viewmode: "table", url: "search-results-table-view.html" }
]
},
link: function(scope) {
scope.toggleView = function() {
scope.templates.push(scope.templates.shift());
}
}
}
我的“search-results-container.html”文件:
<div ng-include="templates[0].url"></div>
我的“search-results-table-view.html”文件:
<table>
<tr ng-repeat="item in ctrl.items">
<td>{{ item.title }}</td>
<tr>
</table>
动态加载模板没有问题。但是,我希望这些模板在加载完成后运行一些“回调”功能。
我知道有“onload”属性,我可以像这样添加:
<div ng-include="templates[0].url" onload="onLoadFunction()"></div>
这意味着我需要在范围内使用“onLoadFunction”填充我原来的“search-results-container”指令,这将不得不使用开关(或类似技术)来区分模板文件并运行特定的函数,具体取决于在当前活动的 - 我想阻止它,因为它不干净。
我想为每个模板设置单独的指令,例如:
app.directive("searchResultsTableView", function() {
return {
restrict: "E",
templateUrl: "search-results-table-view.html",
controller: function($scope) {
...
},
link: function(scope) {
scope.someOnLoadFunction = function() {
/* Stuff to execute when template has loaded */
}
}
}
});
如果我这样做,我会相应地更改我的“search-results-table-view.html”:
<search-results-table-view>
<table>
<tr ng-repeat="item in ctrl.items">
<td>{{ item.title }}</td>
<tr>
</table>
</search-results-table-view>
...我遇到某种无限循环或其他东西,Angular / 浏览器崩溃(变得无响应)。有没有办法实现我的计划,而不用大量“onLoad”函数填充容器的指令,每个嵌套模板一个?