如何在AngularJS中有条件地使用标签包围文本? 例如:
function Controller($scope){
$scope.showLink = true or false, retrieved from server;
$scope.text = "hello";
$scope.link = "..."
}
如果{{showLink}}为假
<div>hello</div>
否则
<div><a href="{{link}}">hello</a></div>
答案 0 :(得分:15)
ngSwitch
适用于此:
<div ng-switch="!!link">
<a ng-href="{{link}}" ng-switch-when="true">linked</a>
<span ng-switch-when="false">notlinked</span>
</div>
答案 1 :(得分:11)
据我所知,没有开箱即用的功能可以做到这一点。我对其他答案并不满意,因为他们仍然要求你重复视图中的内部内容。
好吧,你可以用你自己的指令解决这个问题。
app.directive('myWrapIf', [
function()
{
return {
restrict: 'A',
transclude: false,
compile:
{
pre: function(scope, el, attrs)
{
if (!attrs.wrapIf())
{
el.replaceWith(el.html());
}
}
}
}
}
]);
用法:
<a href="/" data-my-wrap-if="list.indexOf(currentItem) %2 === 0">Some text</a>
只有符合条件时,“某些文字”才会成为链接。
答案 2 :(得分:3)
尝试
<div ng-show="!link">hello</div>
<div ng-show="!!link"><a href="{{link}}">hello</a></div>
答案 3 :(得分:2)
您可以使用ng-switch
指令。
<div ng-switch on="showLink">
<div ng-switch when="true">
<a ng-href="link">hello</a>
</div>
<div ng-switch when="false">
Hello
</div>
</div>
答案 4 :(得分:1)
Casey支持AngularJS表达式的修改版本:
app.directive('removeTagIf', ['$interpolate', function($interpolate) {
return {
restrict: 'A',
link: function(scope, el, attrs) {
if (scope.$eval(attrs.removeTagIf))
el.replaceWith($interpolate(el.html())(scope));
}
};
}]);
用法:
<a href="/" remove-tag-if="$last">{{user}}'s articles</a>