如何用angular有条件地解析表达式?

时间:2014-03-09 21:02:01

标签: angularjs

我有一个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>

2 个答案:

答案 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中删除了元素