首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么枚举在*ngFor循环内没有正确计算,但在循环外计算正常?

在*ngFor循环内枚举没有正确计算的原因可能是由于Angular的变更检测机制导致的。Angular使用了一种叫做"脏检查"的机制来检测数据的变化并更新视图。当数据发生变化时,Angular会遍历所有绑定的数据并比较新旧值,如果有变化则更新视图。

在*ngFor循环内部,每次循环都会创建一个新的作用域,这意味着每个循环都有自己的变量副本。当枚举在循环内部计算时,Angular可能无法正确检测到变化,因为它只会检测当前作用域内的变量。

另一方面,在循环外部计算枚举时,Angular可以正确检测到变化并更新视图,因为它可以访问到整个组件的作用域。

为了解决这个问题,可以尝试以下几种方法:

  1. 使用trackBy函数:在*ngFor指令中,可以通过使用trackBy函数来告诉Angular如何跟踪循环中的每个元素。trackBy函数应该返回一个唯一标识符,Angular将使用该标识符来跟踪元素的变化。这样可以确保在循环内部枚举时,Angular可以正确检测到变化。示例代码如下:
  2. 使用trackBy函数:在*ngFor指令中,可以通过使用trackBy函数来告诉Angular如何跟踪循环中的每个元素。trackBy函数应该返回一个唯一标识符,Angular将使用该标识符来跟踪元素的变化。这样可以确保在循环内部枚举时,Angular可以正确检测到变化。示例代码如下:
  3. 使用trackBy函数:在*ngFor指令中,可以通过使用trackBy函数来告诉Angular如何跟踪循环中的每个元素。trackBy函数应该返回一个唯一标识符,Angular将使用该标识符来跟踪元素的变化。这样可以确保在循环内部枚举时,Angular可以正确检测到变化。示例代码如下:
  4. 使用ng-container元素:ng-container是一个逻辑容器,不会被渲染到最终的DOM中。可以在ng-container内部进行枚举计算,这样可以避免创建额外的作用域。示例代码如下:
  5. 使用ng-container元素:ng-container是一个逻辑容器,不会被渲染到最终的DOM中。可以在ng-container内部进行枚举计算,这样可以避免创建额外的作用域。示例代码如下:
  6. 在组件中计算枚举:如果可能的话,可以在组件中计算枚举并将结果存储在一个变量中,然后在模板中使用该变量。这样可以确保在循环内外都能正确计算枚举。示例代码如下:
  7. 在组件中计算枚举:如果可能的话,可以在组件中计算枚举并将结果存储在一个变量中,然后在模板中使用该变量。这样可以确保在循环内外都能正确计算枚举。示例代码如下:
  8. 在组件中计算枚举:如果可能的话,可以在组件中计算枚举并将结果存储在一个变量中,然后在模板中使用该变量。这样可以确保在循环内外都能正确计算枚举。示例代码如下:

以上是一些常见的解决方法,具体使用哪种方法取决于具体的场景和需求。对于更复杂的情况,可能需要进一步调试和分析来找到问题的根本原因。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Unity基础系列(三)——数学表面(数字雕刻)

它将会切换到新的动画,好像什么都没有发生过。 虽然播放模式中修改代码很方便,但在多个函数之间来回切换却并不方便。我们其实可以简单地更改图形的配置选项来完成我们想要的效果。 下面就看看怎么做吧。...正确的做法是for循环中声明和递增一个x变量,就像i迭代器变量一样。为此,循环定义的声明部分和增量部分可以转换为逗号分隔的列表。 ? 每次完成一行处理之后,需要将x重新设置为零。...不再需要i迭代器变量来结束循环了,但它仍然需要索引点数组。在外部循环中定义它,但在循环中增加它。通过这种方式,它在整个过程中都是已知的,并且每一个点上都会增加。 ?...注意,Z坐标只在外部循环的每一次迭代中更改。这意味着不用在内部循环中去计算它。这样就可以将其提升一级,以减少重复工作。 ? 哪个维度放在外部循环进行遍历会造成影响吗? 我用Z做循环,用X做循环。...(每个维度单独的正弦波) 为什么使用*=0.5来取代/=2呢? 这两种方法在数学上是等价的,但乘法指令比除法指令快。如果在循环中执行大量的计算,这是一个简单的优化。

1.6K40

线性模型已退场,XGBoost时代早已来

非结构数据(图像、文本等)的预测问题中,人工神经网络的表现要优于其他算法或框架。但在处理中小型结构数据或表格数据时,现在普遍认为基于决策树的算法是最好的。...这是软硬件优化技术的完美结合,它可以最短时间内用更少的计算资源得到更好的结果。 为什么 XGBoost 如此优秀?...考虑到用于构建基础学习器的循环枚举树的叶节点的外部循环以及计算特征的第二个内部循环的可互换性,这是完全有可能实现的。...由于没有完整的内部循环就无法启动外部循环(两个循环要求的计算资源更多),因此这种嵌套的循环限制了并行。...无论是机器学习还是生活,没有免费的午餐都是一条铁律。作为数据科学家,我们必须要测试所有能处理手头数据的算法,才能判断哪种算法是最好的。此外,只是选择正确的算法还不够。

86020
  • 计算机萌新的成长历程——初识C语言16

    我们今天要探讨的关键字是除上述这些关键字其它的能够供我们今后写代码的过程中直接使用的,下面咱们来简单介绍一下吧。...else——否则(if……else语句);enum——枚举枚举常量);extern——引入外部符号(可以引用其它源文件内部定义的全局变量);float——单精度浮点型;for——for循环语句;goto...那说明一次循环过后,a是自动消失了,然后再进入循环后它又在函数自动创建了这个创建的过程就是 int a = 1;这里我要说明的是局部变量前面我们省略了一个关键字auto,也就是说,这里的局部变量完整的代码是...main函数注释掉,再进行操作: 可以正常运行,这里说明了全局变量在被static修饰后只是作用域被限制了——原本是作用于整个工程,现在被限制自己所处的工程,对全局变量本身是没有影响的,自己所处的项目还是能够正常使用...,通过这里我们可以总结以下函数的链接属性,函数不仅拥有内部链接属性,能够自己所处的项目正常调用,还拥有外部链接属性,不同项目通过extern关键字来声明外部函数,以此来进行正常的调用。

    18020

    Angular 2 架构(下)

    *ngFor 告诉 Angular...以下是几种常见的服务: 日志服务 数据服务 消息总线 税款计算器 应用程序配置 以下实例是一个日志服务,用于把日志记录到浏览器的控制台: export class Logger { log(msg:...通过控制反转,对象在被创建的时候,由一个调控系统所有对象的外界实体,将其所依赖的对象的引用传递给它。也可以说,依赖被注入到对象中。...传统的开发模式中,调用者负责管理所有对象的依赖,循环依赖一直是梦魇,而在依赖注入模式中,这个管理权交给了注入器(Injector),它在软件运行时负责依赖对象的替换,而不是在编译时。...如果容器中还没有所请求的服务实例,注入器就会创建一个服务实例,并且添加到容器中,然后把这个服务返回给 Angular 。

    2.2K20

    领导说:try-catch必须放在循环体外!

    也就是说,没有发生异常的情况下,除去误差值,我们得到的结论是:try-catch 无论是 for 循环还是 for 循环,它们的性能相同,几乎没有任何差别。 ?...从字节码指令可以看出,当代码运行时出错时,会先判断出错数据是否 from 到 to 的范围,如果是则从 target 标志位往下执行,如果没有出错,直接 goto 到 return。...:5 循环的执行结果:3 可以看出在循环体内的 try-catch 发生异常之后,可以继续执行循环;而循环的 try-catch 发生异常之后会终止循环。...因此我们决定 try-catch 究竟是应该放在循环还是循环,不取决于性能(因为性能几乎相同),而是应该取决于具体的业务场景。...例如我们需要处理一批数据,而无论这组数据中有哪一个数据有问题,都不能影响其他组的正常执行,此时我们可以把 try-catch 放置循环体内;而当我们需要计算一组数据的合计值时,只要有一组数据有误,我们就需要终止执行

    51520

    AngularDart 4.0 高级-结构指令 顶

    在此示例中,星号(*)指令属性名称前面。 {{hero.name}} 没有方括号。 没有圆括号。 只要*ngIf设置为一个字符串。...所以隐藏和展示有时候是正确的。 但是如果没有一个令人信服的理由让他们保持身临其境,你应该首先去除用户看不到的DOM元素,并用像NgIf这样的结构指令来恢复未使用的资源。...应用结构指令之前,您可能想暂停一下,以考虑添加和删除元素以及创建和销毁组件的后果。 星号(*)前缀 当然,你注意到了指令名称的星号(*)前缀,并想知道为什么它是必要的以及它做了什么。...NgFor指令具有比本指南中显示的NgIf更多的功能,包括必需的和可选的。 至少NgFor需要一个循环变量(let hero)和一个列表(heroes)。...没有合适的宿主元素时使用作为分组元素。 Angular将星号(*)语法解析为。 NgIf,NgFor和NgSwitch内置指令如何工作。

    16.1K20

    python else语句循环中的运用详解

    # 循环1-5每个数字,或者说循环5次 while j <= 5: # 判断1-10之间的数/2是否有余数 if i % 2 == 0: # 没有余数那么就跳出循环,继续循环...那么就也是说当while循环正常结束的时候才会执行else语句,若被break则将无法执行 (2)分析:将循环计数器改为j = 6为什么会输出10个小于?...首先要知道,不管是while循环还是for循环,使用else都是一样的道理,当循环正常结束才会执行else,否则将不会执行else语句。 循环循环10次,循环5次,循环1次,循环5次。...当循环条件成立执行break,将跳出循环执行循环,当条件不成立就相当于没有这个条件,而直接执行else语句。...当循环正常结束的时候,就会去执行else语句,若碰到break而提前结束,将不会执行else;当循环未能执行的时候,会自动执行else语句 到此这篇关于python else语句循环中的运用详解的文章就介绍到这了

    1.7K20

    ⭐️ 关键字深度剖析 ⭐️第一章(变量&关键字autoregister)

    声明长整型变量或函数 float 声明浮点型变量或函数 double 声明双精度变量或函数 char 声明字符型变量或函数 struct 声明结构体变量或函数 union 声明共用数据类型 enum 声明枚举类型...其他 ” 分支 sizeof 计算数据类型长度 return 子程序返回语句(可以带参数,也可不带参数)循环条件 后面的章节将全部覆盖这32个关键字 如何定义变量 int x...= 10; char c = 'a'; double d = 3.14; 类型 变量名 = 默认值 为什么定义变量 计算机是用来计算的,计算就需要数据,并不是所有数据要立马计算 因此,变量将有需要的数据保存起来...包含在代码块中的变量叫做局部变量 局部变量具有临时性:进入代码块,自动形成局部变量,退出代码块自动释放 对于 函数中的变量是局部变量,不能说错,但说法是不准确的 全局变量 在所有函数定义的变量...auto,auto一般用来修饰局部变量(已经很老,基本永不使用) 统称局部变量:局部变量,自动变量,临时变量,都是一回事 关键字 - register ---- 寄存器 现代 CPU

    37140

    JavaScript 循环

    JavaScript 循环 while和do while循环语句 程序开发中,存在大量的重复性操作或计算,这些任务必须依靠循环结构来完成。...表达式 expr2 中,所有用逗号分隔的子表达式都会计算,但只取最后一个子表达式的值进行检测。expr2 为空,会默认其值为真,意味着将无限循环下去。...除了 expr2 表达式结束循环,也可以循环语句中使用 break 语句结束循环。 示例1 针对上面示例,使用 for 循环来设计。...枚举没有固定的顺序,因此遍历结果中会看到不同的排列顺序。 示例4 for/in 能够枚举枚举的属性,包括原生属性和继承属性。...continue语句 continue 语句用在循环结构,用于跳过本次循环中剩余的代码,并在表达式的值为真时,继续执行下一次循环。它可以接受一个可选的标签名,开决定跳出的循环语句。

    18430

    使用 SwiftUI 创建一个灵活的选择器

    使用 UIKit 时,我总是将这种类型的视图实现为具有特定 UICollectionViewFlowLayout 的 UICollectionView。但在 SwiftUI 中该如何实现呢?...实现选择器本身之前,我列出了所有可自定义属性。接下来,创建了用于计算特定字符串值的宽度和高度的字符串扩展。...这就是为什么我引入了一个 FontWeight 枚举,其中包含以 UIFont 权重命名的所有可能情况。...这就是为什么我将分隔行的结果映射到元组中,其中包含每行和 UUID 值。 由于如此,我可以向 ForEach 循环提供 id 参数。...这就是为什么我首先将整个 ForEach 循环包装在 HStack 中,然后再包装在 Group 中,以确保编译器可以正确解释一切。

    29720

    第2章:循环结构程序设计

    = 这样的运算符来比较,检测出这种误差的.所以导致结果的不正确. 多试一下,将循环条件改为 i != 0.1 或者 i != 0.2时,程序能够正常运行,得正常结果. 但是当i !...注意,这里是“退出循环”而不 是“继续循环”(想一想,为什么),可以把break换成continue加以验证。 另外,注意到这里的for语句是“残缺”的:没有指定循环条件。...,直到最后一项小于10−6 本题也是重复计算,因此可以用循环实现。但不同的是,只有算完一 项之后才知道它是否小于10-6。也就是说,循环终止判断是计算之后,而不是计算之前。...不过,C语言并没有阶乘运算符,所以这句话只是伪代码,而不是真正的代码。 事实上,还需要一次循环计算i!,即for(int j=1;j<=i;j++)factorial*=j;。...要计算只包含加法、减法和乘法的整数表达式除以正整数n的余数,可以 每步计算之后对n取余,结果不变。

    1.5K10

    AngularDart4.0 指南- 模板语法一 顶

    以下片段中,双花括号的标题和引号中的isUnchanged引用了AppComponent的属性。...事件循环的一个回合期间,依赖值不应该改变。如果一个幂等表达式返回一个字符串或一个数字,当它在一行中调用两次时会返回相同的字符串或数字。...事件循环的这个周期中,您可以自由地在任何地方进行所有更改。 像模板表达式一样,模板语句使用了一种看起来像Dart的语言。...HTML开发的正常过程中,您可以使用HTML元素创建一个可视结构,并通过使用字符串常量设置元素属性来修改这些元素。...Angular为什么提供属性(attribute)绑定? 当没有要绑定的元素属性时,必须使用属性绑定。 考虑ARIA,SVG和table span属性。 他们是纯粹的属性。

    5.2K10

    第四章3:while 循环

    当使用while循环时,通常会用到条件判断的布尔值(True为符合条件,False为不符合条件)。每个循环都有他们的最适合的应用环境,但在实际操作中,大多数情况都是看个人的喜好。...---- 无限循环 之前的章节中,我曾提到无限循环是不好的。无限循环将使代码持续运行直到程序中断,或计算机关机或时间停止为止。知道了这些后,我们创建项目时,请一定要避免创建无限循环的代码块。...让我们来看一个例子: # 嵌套循环是使用两个及以上的循环 for i in range(2): # 循环 for j in range(3): # 循环 print(i,...表4-4 跟踪嵌套循环值 迭代 i值 j值 循环循环值 1 0 0 1 1 2 0 1 2 1 3 0 2 3 1 4 1 0 4 2 5 1 1 5 2 6 1 2 6 2 总的来说,从表4...而i值也仅在外循环运行时才会递增,直到循环完成后才运行循环循环必须每次从0到3(不包括3)计数才能运行下一个 循环进行迭代。

    1.5K20

    【C++篇】手撕 C++ string 类:从零实现到深入剖析的模拟之路

    5.1.2.4 复杂类型为什么不能在类初始化? 对于复杂类型(如 double、float 或自定义类等),这些类型的初始化可能涉及到运行时的计算或需要分配更多的内存。...C++ 的设计者为了避免复杂类型的静态成员初始化时增加不必要的复杂性,要求这些变量必须在类进行初始化。...class MyClass { public: static const double pi; // 声明,但不能直接初始化 }; // 初始化 const double MyClass...::pi = 3.14159; 5.1.2.5 为什么 static const size_t npos = -1 可以初始化?...5.1.2.6 总结:为什么静态 const 的复杂类型不能在类初始化 整型和枚举类型的 const 静态成员变量可以初始化,因为它们是编译时常量,编译器可以直接替换为常量值。

    22110

    你真的会写for循环吗?这 11 个 for 循环优化你得会...

    日常开发中,经常会遇到一些循环耗时计算的操作,一般也都会采用 for 循环来处理,for 作为编程入门基础,主要是处理重复的计算操作,虽然简单好用,但在写法上也有很多的考究,如果处理不好,可能成为拖垮程序的罪魁祸首...for (Object o : list) { System.out.println(o); } 优点:简洁结合泛型使用更简洁 缺点: jdk1.4向下不兼容 无法直接拿到索引 方式七:循环嵌套大原则...(int i = list.size()-1; i >= 0; i--) { // 循环体 list.remove(i); } 方式十一:减少方法调用 循环体内部尽可能减少方法的调用...int size = list.size(); for (int i = 0; i < size; i++) { // 频繁调用的方法 // 这部分调用和当前的循环没有直接性关系,就可以不放在循环体内...(); for (int i = 0; i < size; i++) { // 使用缓存的结果 // 循环体 } 以上是一些常见的for循环,很多都是一些不起眼的小细节,改或不改都不会影响代码的正常执行

    39610

    Ansor论文阅读笔记&&论文翻译

    (并行循环,矢量化和展开循环,这个就对应了GEMM优化中的优化的关键思路)虽然生成了完整的代码,但这个代码的性能是由 Evolutionary Search 来保证的。...查询学习到的代价模型比实际测试快几个数量级,因此我们可以几秒钟评估数千个程序。 Task scheduler. 使用程序采样器和性能调试器允许 Ansor 为计算图找到高性能的张量化程序。...HasMoreReductionParallel(S, i) 表示S中的节点i是否空间维度上几乎无法并行但在reduction维度上有足够的并行机会(例如计算二维矩阵乘法, )。...本节中,我们对草图进行注释,使它们成为用于微调和评估的完整程序。给定生成的草图列表,我们随机选择一个草图,随机填充tile尺寸,并行一些循环,矢量化一些循环,并unroll一些循环。...Ansor 进一步验证合并的程序以保证功能的正确性。验证很简单,因为 Ansor 只使用了一小部分循环转换重写步骤,底层代码生成器可以通过依赖分析来检查正确性。

    1.9K30

    AngularDart4.0 指南- 模板语法二 顶

    “结构指令”指南介绍了结构指令的深入细节,您将在其中学习以下内容: 为什么必须在指令名称前加上前缀星号(*)。 当指令没有合适的宿主元素时如何对元素进行分组。 如何编写自己的结构指令。...为什么你只能应用一个结构指令到一个元素。 本节介绍常见的结构指令: NgIf:有条件地从DOM中添加或删除元素。 NgFor:为列表中的每个项目重复一个模板。...字符串“let hero of heroes”是指: 取英雄列表中的每个英雄,将其存储本地英雄循环变量中,并使其可用于每次迭代的模板HTML。...绑定的目标是=的左边。 源位于=的右侧。 绑定的目标是绑定标点符号中的属性或事件:[],()或[()]。 源是引号(“”)或插值({{}})。...HeroDetailComponent.hero括号; 它是一个属性绑定的目标. HeroDetailComponent.deleteRequest括号; 它是事件绑定的目标。

    30K20
    领券