ngswitch 和 ng-repeat 在同一元素上产生干扰

2023-12-21

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

首先看看这个Plunker:http://plnkr.co/edit/CB7k9r?p=preview 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 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' ....> and 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 逻辑之后(结构方面,内部)使用指令。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ngswitch 和 ng-repeat 在同一元素上产生干扰 的相关文章

随机推荐

  • 选择不等待 ASP.NET Core WebAPI 控制器中的异步函数运行

    场景如下 后端 Asp NET Core WebAPI 2 2 前端 使用 API 的 iOS 和 Android 我有一个功能允许用户向其他用户发送消息 消息的发送是通过异步操作完成的 public async Task
  • 如何使用 CodeBlocks 安装 Boost 库?

    我的发言即将结束了 我正在研究保存文件和序列化 结果发现 C 不具备 Python 所具有的那种原生序列化能力pickle 但幸运的是 它有 Boost 所以我开始寻求在我的系统上安装 Boost 1 47 以便能够序列化我的对象 但到目前
  • Symfony 4.1 - CORS 问题

    我的 symfony 4 1 API 有一些问题 我正在通过使用 Angular httpclient 的离子应用程序使用我的 API 我的问题尤其是 CORS 标头Access Control Allow Methods 我遇到了 COR
  • Jackson 3rd Party 类没有默认构造函数

    我正在尝试使用 Jackson 从 Json 读取 写入我的 POJO 截至目前 我已对其进行配置并可用于我的课程 第三方课程除外 当尝试读取 Json 时 出现错误 org codehaus jackson map JsonMapping
  • 正则表达式中的“?i”和“?-i”是什么意思?

    有人可以解释一下什么吗 i and i 用正则表达式包裹一个单词是什么意思 i test i 我测试过并且匹配test TEST and teSt 但我以前从未见过这个 什么是 before i意思是 我看到了这个here https gi
  • iPhone 长 plist

    我有一些数据想要添加到我的应用程序中 大约 650 个类别 包括名称 ID 号 每个类别平均有 85 个项目 每个类别都有一个名称 ID 号 iPhone会支持这么大的plist吗 我想首先在 UITableView 中显示类别 当选择一个
  • JSON 是否应该包含空值 [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我正在创建一个以 JSON 形式返回结果的 API 当值为空时是否应该在结果中包含键是否有当前的最佳实践 例如 title Foo Bar au
  • 如何访问在 try 语句中初始化的对象

    我是 C 新手 想知道您是否可以执行以下操作 或者您是否有更好的方法 我的数据库处理程序有一个自定义异常类 我在主程序中使用它 如下所示 int main int argc char const argv try DatabaseHandl
  • 如何在 IntelliJ 中更改 Kotlin 的“此属性有支持字段”代码编辑器突出显示?

    天哪 IntelliJ 的这种默认颜色突出显示令人眼花缭乱 我怎样才能改变这个 您可以像修改任何其他语法突出显示一样修改 Kotlin 颜色突出显示 你会在下面找到它Preferences gt Colors Fonts gt Kotlin
  • 使用双 SIM 卡功能时如何获取 PhoneStateListener

    所以我目前正在 Android 中为双 SIM 卡设备实现呼叫转移功能 为了读取 SIM 卡呼叫转移的当前状态 启用 禁用 我执行以下操作 我创建一个TelephonyManager object val telephonyManager
  • 更改 SQL 中序列号的位置

    我有一个名为学生的表 结构如下 AdmissionNo RollNo Name 1001 1 A 1003 2 B 1005 3 C 1006 4 D 1008 5 E 现在我想将 rollno 4 更改为 2 并增加即将到来的数字 所以结
  • Logstash mutate 添加 json 中的所有字段

    我正在使用 Logstash 插件 logstash input rethinkdb 该插件获取数据库中的所有编辑并输出包含以下结构的 json 对象 db itjobs table countries old val null new v
  • 用于判断网站是否正常运行的批处理脚本

    我的问题是 ping 无法告诉我网站是打开还是关闭 我需要知道该网站是打开还是关闭 如果没有启动 请重新启动脚本 如果有人能帮助我那就太好了 我唯一能想到的就是抓取网站的内容并查看它是否已启动 我想在带有 Apache Tomcat 的服务
  • .htaccess 标头被 Apache 忽略

    我有一个使用相同核心的网站 htaccess与许多其他网站一样详细 但是该网站无法正确加载 htaccess指令 给出一组基本的 HTTP 标头 HTTP 1 1 200 OK Date Mon 12 Nov 2018 09 34 28 G
  • ggforce facet_zoom - 仅在缩放示例上添加标签

    我想在散点图中标记点 但仅限于那些在散点图中facet zoom控制板 这是一个例子 library ggplot2 library ggforce library ggrepel library magrittr labels lt le
  • CSS 变换:旋转仅适用于图像

    我有这个代码 div img src image png height 40 width 160 div
  • 功能区工具栏和 Visual Studio 2008 Service Pack 1

    今天我在听Hansel 分钟显示有关 NET 3 5 SP1 里面有什么 http www hanselminutes com default aspx showID 145 并且他们两次提到 Visual Studio 2008 Serv
  • 如何在不扩展 Activity 的类中使用 getIntent() ?

    我试图从类 Play 传递一个字符串 该类通过使用以下方法扩展 Activity Bundle data new Bundle Intent i new Intent Play this Receive class String categ
  • 如何禁用 html 代码块的基础或引导样式?

    我正在使用mailgun 尽管这个问题与mailgun无关 来解析传入的电子邮件 并且mailgun会将解析后的电子邮件http发布到我的服务器 当我收到帖子时 我得到了多部分电子邮件的 html 代码 我想向我的用户显示 html 电子邮
  • ngswitch 和 ng-repeat 在同一元素上产生干扰

    我在 Angular 中遇到了我没有预料到的行为 这篇文章的目的是找出这是一个错误还是有意为之 并可能解释为什么这样做 首先看看这个Plunker http plnkr co edit CB7k9r p preview http plnkr