angularjs - ng-repeat 和 ng-switch 不适用于同一元素

标签 angularjs angularjs-directive angularjs-scope angularjs-ng-repeat ng-switch

JS

$scope.mode = "test"
$scope.array = ['test1', 'test2', 'test3']

HTML

<div ng-switch on="mode">
    <div ng-repeat="item in array" ng-switch-when="test">
        Test {{item}}
    </div>
</div>

当我执行上述操作时,我得到的输出是

Test Test Test

它似乎无法访问项目。如果我删除 ng-switch-when 那么它就可以正常工作。

最佳答案

这是因为 ng-switch 创建了一个子作用域,这同样适用于 ng-repeat。 ng-repeat 以优先级运行 1000 ng-switch 位于 800 。因此,ng-repeat 在每个重复的 div 元素上创建的子作用域会被 ng-switch 覆盖,因此分配的 ng-repeat元素上的子作用域最终消失了。一种可能的方法是将 ng-switch 包装在 ng-repeat 之外,因为无论如何您都不想为每个重复元素计算 ng-switch 表达式。这是 1.2 版本的情况。

现在从 Angular 1.3.x 版本开始,ng-switch 的优先级已修改为 1200 并且 ng-repeat 保持在 1000,因此 ng-repeated 范围将占上风,因为它现在的优先级较低,并且在这种情况下它将起作用。

<强> Plnkr

关于angularjs - ng-repeat 和 ng-switch 不适用于同一元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25675742/

相关文章:

javascript - ionic 2 - navPush 出于某种原因无法正常工作

javascript - AngularJS 提交时禁用按钮 - 错误时重新启用

javascript - 将函数变量与数组循环进行比较

angularjs - ng-click 后如何切换字段必需属性?

javascript - 如何从 Angular JS 中的 ng-repeat 复选框值获取对象

javascript - Angular $q在http请求之前执行 "then"

javascript - 从数组指令中删除重复项

javascript - Angular 路线不起作用

javascript - $emit 或 $broadcast 一个事件从 Controller 到指令 AngularJS

angularjs - 指令不插值,在模板字符串中