使用trackby和ng-if进行ng-repeat

时间:2014-06-02 14:37:17

标签: angularjs angularjs-ng-repeat angular-ng-if

我的表格ng-if上有一个<tr>,具体取决于某个值。

我的代码如下所示:

<tr ng-if="someConditional" ng-repeat="row in rows track by row.obj1">....</tr> 

<tr ng-if="!someConditional" ng-repeat="row in rows track by row.obj2">....</tr> 

虽然row.obj1存在且row.obj2不存在而反之亦然,但这会给我一个错误。

当someConditional为true时,row.obj1存在,而row.obj2存在于!someConditional为true。

当someConditional为true时,angularjs会抛出row.obj2不存在(即未定义)的错误。

这是一个已知的错误吗?这有什么解决方法吗?

2 个答案:

答案 0 :(得分:4)

你可以将条件转入ng-repeat吗?

<tr ng-repeat="row in rows track by (someConditional ? row.obj1 : row.obj2)">....</tr> 

答案 1 :(得分:1)

ngRepeat的优先级高于ngIf(请参阅每个链接的“指令信息”部分)。换句话说,输出不会是:

if condition then
    foreach
        ...
    endforeach
endif

而是:

foreach
    if condition then
        ...
    endif
endforeach

一种解决方案是只使用一个ng-repeat语句,并将条件嵌套在此循环中。