我有一个ng-repeat,它显示了标记的条件部分。但是,标记中的所有表达式仍然被解析,因此在未定义时抛出异常。
E.G:如果item.discriminator是VoteOnNodeRcNotification,其他ng-show仍然会解析,例如{{ item.nodeCommentText }}
不存在
即:(在ng-repeat内部
<div ng-show="item.discriminator == 'VoteOnNodeRcNotification'" class="type-specific">
<a class="outer-link self-clear" ng-href="{{ nodeLink(item.nodeId, item.nodeText) }}">
<small class="rep-change-mag" ng-class="getAdjustedCss(item.amountAdjusted)">
{{ friendlyAmountAdjusted(item, item.amountAdjusted) }}
</small>
<p class="rep-change-assoc">
Edit accepted: {{ item.nodeText }}
</p>
</a>
</div>
<div ng-show="item.discriminator == 'VoteOnNodeCommentRcNotification'" class="type-specific">
<a class="outer-link self-clear" ng-href="{{ nodeLink(item.nodeCommentId, item.nodeCommentText) }}">
<small class="rep-change-mag" ng-class="getAdjustedCss(item.amountAdjusted)">
{{ friendlyAmountAdjusted(item, item.amountAdjusted) }}
</small>
<p class="rep-change-assoc">
Vote up: {{ item.nodeCommentText }}
</p>
</a>
</div>
答案 0 :(得分:1)
您可以使用'ng-if''。就像ng-show一样,但是当条件是假的时候不会生成内容。
答案 1 :(得分:1)
ng-show只显示/隐藏元素,因此它仍然存在于DOM中,因此将始终进行评估。您可以在控制器中为item.discriminator设置默认值。例如..
$scope.item = {};
$scope.item.discriminator = null;
null仍然是假的,因此将被ng-show隐藏,但不会因为实际定义而抛出错误。另一个选择是使用ng-if而不是ng-show,当表达式为falsy时,它实际上从DOM中删除了元素