AngularJS:使用动态模板执行指令并替换选项的正确方法?
AngularJS: Correct way of doing directive with dynamic template and replace option on?
使用动态模板指令和保留替换选项的最简单(和正确)方法是什么(想要所有我模板上的属性)。
我正在尝试创建 "link" 指令,它将作为 ui-router/ui-sref 的扩展:当状态为当前状态时 - 我们只显示一个文本(而不是 link)。
通过编译(或 $compile 服务)只做动态模板不是问题,但我怎么能保持替换选项打开,将所有指令属性传递给模板。
所以我想要
<ui-link ui-sref="dashboard.common" class="nav-alt__item">Dashboard</ui-link>
喜欢
<a ui-sref="dashboard.common" class="nav-alt__item">Dashboard</a>
在一种情况下
<span ui-sref="dashboard.common" class="nav-alt__item">Dashboard</span>
在另一个。
实际上我不需要 ui-sref
跨度,但这不是什么大问题。
可能已经存在 ui-路由器的扩展解决方案。
动态模板?可能没有真正的 "angular" 方法来做到这一点。使用静态模板:
<span>
<span ng-if="isCurrent()">Dashboard</span>
<a ui-sref="{{uiSref}}" ng-if="!isCurrent()">Dashboard</a>
</span>
您可以通过提供函数 template
来拥有动态模板,但通常这是错误的方式,因为您没有内插属性值或任何其他可能对决策有用的东西。
嵌套指令是 Angular 所擅长的。
app.directive('uiLink', function () {
return {
scope: {
uiSref: '@',
current: '@?'
},
transclude: true,
template: [
'<a ng-if="!current" ui-sref="{{uiSref}}" ng-transclude></a>',
'<span ng-if="current" ng-transclude></span>',
].join('')
};
});
当模板中有多个根元素时,replace
不是一个选项。所以可选属性(class 等)应该属于 ui-link
并且不必转换为嵌套元素。
使用动态模板指令和保留替换选项的最简单(和正确)方法是什么(想要所有我模板上的属性)。
我正在尝试创建 "link" 指令,它将作为 ui-router/ui-sref 的扩展:当状态为当前状态时 - 我们只显示一个文本(而不是 link)。
通过编译(或 $compile 服务)只做动态模板不是问题,但我怎么能保持替换选项打开,将所有指令属性传递给模板。
所以我想要
<ui-link ui-sref="dashboard.common" class="nav-alt__item">Dashboard</ui-link>
喜欢
<a ui-sref="dashboard.common" class="nav-alt__item">Dashboard</a>
在一种情况下
<span ui-sref="dashboard.common" class="nav-alt__item">Dashboard</span>
在另一个。
实际上我不需要 ui-sref
跨度,但这不是什么大问题。
可能已经存在 ui-路由器的扩展解决方案。
动态模板?可能没有真正的 "angular" 方法来做到这一点。使用静态模板:
<span>
<span ng-if="isCurrent()">Dashboard</span>
<a ui-sref="{{uiSref}}" ng-if="!isCurrent()">Dashboard</a>
</span>
您可以通过提供函数 template
来拥有动态模板,但通常这是错误的方式,因为您没有内插属性值或任何其他可能对决策有用的东西。
嵌套指令是 Angular 所擅长的。
app.directive('uiLink', function () {
return {
scope: {
uiSref: '@',
current: '@?'
},
transclude: true,
template: [
'<a ng-if="!current" ui-sref="{{uiSref}}" ng-transclude></a>',
'<span ng-if="current" ng-transclude></span>',
].join('')
};
});
当模板中有多个根元素时,replace
不是一个选项。所以可选属性(class 等)应该属于 ui-link
并且不必转换为嵌套元素。