- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在 Angular 2 中创建一个演示应用程序。但是在执行此操作时,我遇到了这个错误:
core.umd.js:3491 EXCEPTION: Uncaught (in promise): Error: error in security.component.html:35:72 caused by: trackBy 必须是一个函数,但未定义。错误:trackBy 必须是函数,但收到未定义
任何人都可以建议我在下面的代码中做错了什么?
security.component.html:
<h2>Template :</h2>
<template ngFor let-hero [ngForOf]="heroes" let-i="index" let-odd="odd" [ngForTrackBy]="trackById">
<div [class.odd]="odd">({{i}}) {{hero.name}}</div>
</template>
security.component.ts:
import { Component,Input } from '@angular/core';
@Component({
moduleId : module.id,
selector : 'security-component',
templateUrl : '../views/security.component.html'
})
export class securityComponent{
private heroes = [
{id: 11, name: 'Mr. Nice' },
{id: 12, name: 'Narco' },
{id: 13, name: 'Bombasto' },
{id: 14, name: 'Celeritas' },
{id: 15, name: 'Magneta' },
{id: 16, name: 'RubberMan' },
{id: 17, name: 'Dynama' },
{id: 18, name: 'Dr IQ' },
{id: 19, name: 'Magma' },
{id: 20, name: 'Tornado' }
];
}
最佳答案
trackBy
接受一个有两个参数的函数:index
和 item
。如果给出了 trackBy
,Angular 通过函数的返回值来跟踪变化。
因此您需要在组件中使用名称为 trackById
的函数
trackById(index, hero) {
return hero.id
}
因为 2.4.2 允许使用 null/undefined
值给 NgForTrackBy
https://github.com/angular/angular/blob/master/CHANGELOG.md#242-2017-01-06
关于angular - TrackBy 必须是一个函数,但在 Angular 2 中收到未定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42152678/
我正在尝试将 async 管道与 *ngFor 一起使用,以显示异步获取的项目数组。 {{item.text}} ngOnInit() { // very simple h
我有一个 *ngFor用于 array 的指令对象,它们具有相当多的属性。 我要这个 *ngFor仅在更改其中三个属性时才更新,但根据 documentation在 TrackByFunction 上
我的组件有点像 {{user.emailId}}× trackBy 函数为 public
最近,当您没有在每个 *ngFor 上实现 trackBy 函数时,Angular styleguide-lint-extender“Codelyzer”会发出警告。我想知道为什么这会被视为一个问题。
当我阅读有关 ngFor 和 trackBy 的文档 ( https://angular.io/api/common/NgForOf ) 时,我以为我明白 Angular 只会在 trackBy 返回
我想通过传递属性名称来跟踪 ngFor 项目来创建一个唯一的 trackBy 指令,这是代码: import { NgForOf } from '@angular/common'; import {
我想用trackBy提高长列表的性能。此列表的数据在更改时应该是不可变的,并通过异步管道提供给模板。虽然我正在使用 trackBy功能,每次我发出新值时都会重新呈现整个列表。即使数组内的对象与相同的
我在我的 ngFor 中激活了 trackBy 并且我确认它被调用并且正在工作,但我仍然注意到 DOM 在我的浏览器中重新呈现,这导致行闪烁。这里发生了什么?在 Angular1 中,我可以在我的浏览
在 ngFor 中使用“trackBy: index”是不是一个好习惯? 例如: {{error}} 在所有 *ngFor 中每次都需要使用 trackBy 来提高性能,否则我们可以忽略它。 如果
trackBy 函数(例如在 ngFor 中)提供两个参数:index 和 item(来自被迭代的集合)。有没有办法将附加信息(作为参数?)传递给 trackBy 函数? 我的情况是,我可能会为我的组
我想使用 ngFor trackBy 索引。我找到了类似下面的方法 @Component({ selector: 'my-app', template: ` {{item
我真的不明白我应该从 trackBy 返回什么。根据我在网上看到的一些示例,我应该返回对象上某些属性的值。这样对吗?为什么要获取 index 作为参数? 例如,在下面的情况下: Component.c
我的印象是 trackBy 函数仅在尝试优化 *ngFor 的性能时使用,因此如果发生变化,DOM 不会待重建。 但是,最近,我遇到了一种情况,trackBy 实际上修复了错误的行为。 以此为例:ht
我有一个更大的项目,我有 4 个嵌套的 *ngFor。所以创作大约有 200 行,我认为分享不会有帮助,所以我会尽可能地解释它。问题 刷新对象后,元素被销毁并重新创建。这会导致性能问题(我只关心 0.
在 Angular 中,*ngFor 是否需要 trackBy 函数?看了几篇here , here , here , 和 here也就是说使用 trackBy 会提高性能并具有更好的内存管理。但我想
我想使用 cdk 拖放来重新排序 ngFor 列表,但是因为我不想在放置后为每个元素再次触发动画,所以我还想使用 trackby 问题是当我使用 trackby 时,拖动每次都会快速返回而不是停留在缩
这个问题在这里已经有了答案: function gets called several times (3 个回答) 2年前关闭。 我已经开始使用 trackBy对于一些 ngFor在我的应用程序中进行
我有一个项目,前端是通过@angular/cli: 1.1.3开发的。一切工作正常,直到我尝试在产品模式下编译项目(ng build -prod)。在我使用 *ngFor 指令和 trackBy to
我正在 Angular 2 中创建一个演示应用程序。但是在执行此操作时,我遇到了这个错误: core.umd.js:3491 EXCEPTION: Uncaught (in promise): Err
在下面的例子中: https://stackblitz.com/edit/track-by-reuse?file=src/app/app.component.ts 如果将列数从 4 更改为 3,则具有
我是一名优秀的程序员,十分优秀!