Pim*_*mgd 6 javascript angularjs angularjs-ng-transclude
我想要转发内容,好像我将内容复制粘贴到我写的文件中<div data-ng-transclude="">.我该怎么做呢?
我知道我可以使用ng-include包含模板,我可以使用脚本标签来定义模板.但这会使模板缓存变得混乱并污染模板命名空间.
我想这样做,以便我可以有一个(或更多!这就是整点)文件,我在其中定义我想要显示我的项目的方式,
<!-- list directive to show the items -->
<div data-item-list="" data-values="vm.items">
<!-- content to include to display list items -->
<div class="form-relation-picker-value" ng-bind="item.value.title"></div>
<div class="form-relation-picker-subtitle" ng-bind="item.value.subTitle"></div>
</div>
Run Code Online (Sandbox Code Playgroud)
和一个文件,我在其中定义列表结构的工作方式.
<div class="list-container">
<div class="list-item"
data-ng-click="vm.select(item)"
data-ng-repeat="item in vm.items | orderBy : vm.orderBy"
data-selected="{{vm.isSelected(item)}}">
<div class="flex">
<div ng-transclude=""></div><!-- item display via transclude -->
<div class="grid-col flex-icon form-relation-picker-chrome-height-fix">
<div data-ng-show="vm.isSelected(item)" class="icon check"></div>
</div>
</div>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
如果我做这样的事情,这是有效的:
<div data-item-list="" data-values="vm.items" data-template-to-use="randomhash">
<script type="text/ng-template" id="randomhash">
<div class="form-relation-picker-value" ng-bind="item.value.title"></div>
<div class="form-relation-picker-subtitle" ng-bind="item.value.subTitle"></div>
</script>
</div>
Run Code Online (Sandbox Code Playgroud)
像这样的列表结构......
<div class="list-container">
<div class="list-item"
data-ng-click="vm.select(item)"
data-ng-repeat="item in vm.items | orderBy : vm.orderBy"
data-selected="{{vm.isSelected(item)}}">
<div class="flex">
<div data-ng-include="vm.templateToUse"></div>
<div class="grid-col flex-icon form-relation-picker-chrome-height-fix">
<div data-ng-show="vm.isSelected(item)" class="icon check"></div>
</div>
</div>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
但是,就像我说的那样,它会使模板缓存变得混乱.
如果我转换内容,那么它将停止工作,因为使用包含该指令的指令的范围来评估已转换的内容<div data-item-list="".也就是说,"item"不存在.
如何使用包含被转换内容的指令范围来评估已转换的内容?
您需要的是一个模板函数,它将提取模板元素的内容(在 Angular 编译之前出现在 HTML 中的元素)并将其嵌入到指令的模板中。
如文档中所述,templateDDO 的属性可以是一个函数,在这种情况下,它接收模板元素作为参数(以及其他内容),并期望以字符串形式返回指令的模板。
你可以使用这样的东西:
.directive('itemList', function itemListDirective() {
// DDO
return {
...
template: function itemListTmplFn(tElem) {
var customContent = tElem.html();
return '...' + customContent + '...';
}
};
})
Run Code Online (Sandbox Code Playgroud)
这是一个使用API 的简单演示.component()(在 v1.5 中引入)。如果您想使用普通的旧版本,会有一些细微的差别.directive(),但您应该能够轻松适应它。
| 归档时间: |
|
| 查看次数: |
521 次 |
| 最近记录: |