【问题标题】:ng-repeat with trackby and ng-if使用 trackby 和 ng-if 进行 ng-repeat
【发布时间】:2014-06-02 22:55:47
【问题描述】:

我有一张桌子,在 <tr> 上有一个 ng-if,具体取决于某个值。

我的代码如下所示:

<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 不存在时,这会给我一个错误,反之亦然。

row.obj1 在 someConditional 为真时存在,row.obj2 在 !someConditional 为真时存在。

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

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

【问题讨论】:

  • 很难理解您的问题:您遇到了什么错误?价值观是什么?我建议你写一个 JSFiddle 来演示这个问题!

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


【解决方案1】:

您能否将条件滚动到 ng-repeat 中?

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

【讨论】:

    【解决方案2】:

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

    if condition then
        foreach
            ...
        endforeach
    endif
    

    而是:

    foreach
        if condition then
            ...
        endif
    endforeach
    

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

    【讨论】:

    • 即便如此,如果我的对象因某些条件而不同,如何通过工作进行跟踪?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多