Displaying link conditionally in Angular.js
基本上,我的模板中有以下代码:
1 2 3 4 5 6 7 8 9
| <tr ng-repeat="entry in tableEntries">
<td ng-switch="entry.url == ''">
<span ng-switch-when="false">{{entry.school}}</span>
<span ng-switch-when="true">{{entry.school}}</span>
</td>
...
</tr> |
如您所见,当entry.url不为空,而不是纯文本时,我正试图显示一个可单击的URL。它很好用,但看起来很难看。有更优雅的解决方案吗?
我能想到的另一种方法是使用ng-if:
1 2 3 4
| <td>
<span ng-if="entry.url != ''">{{entry.school}}</span>
<span ng-if="entry.url == ''">{{entry.school}}</span>
</td> |
但接下来我会重复几乎相同的比较两次,看起来更糟。你们怎么处理这个问题?
- 这可能有助于您:stackoverflow.com/questions/1581278/&hellip;
- 使用
,则只需使用true/false。
你可以试试。 hello
hello 但是你用的ngSwitch应该没问题。
您可以创建一个隐藏复杂性的自定义指令: HTML
1 2 3 4 5 6
| <tr ng-repeat="entry in tableEntries">
<td>
<link model="entry"></link>
</td>
...
</tr> |
JS
1 2 3 4 5 6 7 8 9 10
| app.directive('link', function() {
return {
restrict: 'E',
scope: {
model: '='
},
template: '{{model.school}}<span ng-if="model.url == ''"> {{ model.school }}</span>'
}
}); |
使用双重否定,它强制转换为布尔值,因此如果字符串不为空,!!entry.url将返回true。
1 2 3 4
| <td ng-switch="!!entry.url">
<span ng-switch-when="true">{{entry.school}}</span>
<span ng-switch-when="false">{{entry.school}}</span>
</td> |
一个好的读物是什么!!(不是)javascript中的运算符?双重否定(!!)在javascript中-目的是什么?
我建议在td中使用ng class="‘classname':whentryurliswhatever",并更改访问的css样式,例如:
1 2 3 4 5
| td span{ /*#normal styles#*/ }
.className span{ /*#styles in the case of added classname (when it is a link)#*/
text-decoration: underline;
cursor: pointer;
} |
然后只需更改在JavaScript代码中定义的函数内单击ng时发生的情况。
1 2 3 4 5
| $scope.yourFunction = function(url){
if(!!url){
window.location = YourURL;
}
} |
这将减少代码重复,因为您的HTML现在可以是:
1 2 3 4 5 6
| <tr ng-repeat="entry in tableEntries">
<td ng-class="{'className': !!entry.url}">
<span ng-click="yourFunction(entry.url)">{{entry.school}}</span>
</td>
...
</tr> |
- NG点击什么?我不知道你在说什么。你建议在CSS中隐藏未使用的元素吗?怎么会比我现在做的更好呢?
- 一点也不,在您的CSS中,您可以在链接上使用.className span{ text-decoration: underline; cursor: pointer; }和任何其他样式。然后在你的范围内,让EDOCX1[1]
- 我已经编辑了答案,试图更好地解释这个问题。
|