gpt4 book ai didi

angularjs - ng-switch 和 ng-repeat 对同一元素进行干扰

转载 作者:行者123 更新时间:2023-12-04 01:51:52 24 4
gpt4 key购买 nike

我在 Angular 中遇到了我没想到的行为,这篇文章的目的是找出这是一个错误还是有意为之,并可能解释为什么要这样做。

首先看到这个Plunkr:http://plnkr.co/edit/CB7k9r?p=preview .在示例中,我创建了一个名为 array 的数组,其中包含三个对象条目。此外,我根据输入字段的内容(称为切换)创建了一个 ng-switch。当toggle 的值为1 时,它应该打印以“1”为前缀的数组中所有对象的名称,否则以“other”为前缀。

这不能按预期工作,并显示错误:

Error: Argument '?' is required at assertArg 

然而,同一个例子重写( http://plnkr.co/edit/68Mfux?p=preview )在列表周围有一个额外的 div,ng-switch 移动到这个 div,ng-switch-when 从 li 移动到 ul(分离 ng-repeat 和 ng- switch-when) 确实按预期工作。

有人能解释一下这是为什么吗?

最佳答案

它是“有意的”,因为它是 Angular 处理 ng-repeat 的产物。本质上,标记的多个副本被克隆(ng-repeat 中的标记用作模板)并为您正在迭代的每个元素单独编译。因此,angular 基本上是编译 3 <li ng-switch-when='1' ....>和 3 <li ng-switch-default ....> ,但这样做是脱离上下文的 - 没有可以比较的 ng-switch-on 元素。

您可以通过检查生成的标记来看到这种情况:

<ul ng-switch="" on="toggle">  
<!-- ngRepeat: entry in array -->
<!-- ngSwitchWhen: 1 -->
<!-- ngSwitchWhen: 1 -->
<!-- ngSwitchWhen: 1 -->
<!-- ngRepeat: entry in array -->
<!-- ngSwitchDefault: -->
<!-- ngSwitchDefault: -->
<!-- ngSwitchDefault: -->
</ul>

两个指令 - ng-repeat 和 ng-switch - 都应该小心处理,因为它们(例如,与 ng-show 或 ng-hide 不同)严重影响结构。第二个(工作)Plunker 是要走的路 - 仅在 ng-switch 逻辑之后(结构明智,内部)使用指令。

关于angularjs - ng-switch 和 ng-repeat 对同一元素进行干扰,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15431212/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com