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

角度值更改-设置属性然后更新ngFor -不起作用

是一个关于Angular框架中数据绑定和ngFor指令的问题。在Angular中,ngFor指令用于循环渲染列表数据。

当我们在组件中改变一个属性的值时,Angular会自动检测到这个变化,并更新相关的视图。然而,有时候我们可能会遇到属性值更改后视图没有更新的情况。

解决这个问题的一种常见方法是使用不可变对象。当我们改变一个属性时,确保创建一个新的对象,而不是直接修改原始对象。这样做可以确保Angular检测到对象的变化,并更新视图。

另外,如果你在ngFor指令中使用了trackBy函数来跟踪列表项的唯一标识符,确保在更改属性值后,trackBy函数返回一个新的唯一标识符。

以下是一个示例代码,展示了如何正确地改变属性值并更新ngFor指令:

代码语言:txt
复制
// 组件类
@Component({
  selector: 'app-example',
  template: `
    <div *ngFor="let item of items; trackBy: trackByFn">{{ item.name }}</div>
    <button (click)="changeName()">Change Name</button>
  `
})
export class ExampleComponent {
  items = [
    { id: 1, name: 'Item 1' },
    { id: 2, name: 'Item 2' },
    { id: 3, name: 'Item 3' }
  ];

  changeName() {
    // 创建一个新的对象,而不是直接修改原始对象
    const newItems = this.items.map(item => ({ ...item }));
    newItems[0].name = 'New Name';

    // 更新属性值
    this.items = newItems;
  }

  trackByFn(index, item) {
    return item.id; // 返回唯一标识符
  }
}

在这个示例中,当点击按钮时,会改变第一个列表项的名称。通过创建一个新的对象,并更新属性值,确保Angular能够检测到变化并更新视图。

对于这个问题,腾讯云并没有特定的产品或链接来解决,因为这是一个与Angular框架相关的问题,而不是与云计算服务相关的问题。但是,腾讯云提供了丰富的云计算服务和解决方案,可以帮助开发者构建和部署各种应用程序。你可以访问腾讯云官方网站(https://cloud.tencent.com/)了解更多信息。

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

相关·内容

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

更新name属性,可以通过路径$event.target.value来检索已更改的文本。 如果事件属于指令(回想组件是指令),则$event具有指令的所有能力。...删除英雄更新模型,可能会触发其他更改,包括查询并保存到远程服务器。 这些变化通过系统渗透,并最终显示在相关视图。 双向绑定([(…)]) 您经常希望显示数据属性,并在用户进行更改更新属性。...NgModel - 与[(ngModel)]形成元素的双向绑定 在开发数据输入表单时,通常都会显示数据属性,并在用户进行更改更新属性。 使用NgModel指令进行双向数据绑定使得这一切变得简单。...谁可以记住要设置哪个元素属性以及哪个元素事件发出用户更改? 如何从输入框中提取当前显示的文本,以便更新数据属性? 谁想每一次都看看?...在这里,英雄首先在插中被引用,然后传递给组件的hero属性绑定。

30K20

AngularDart 4.0 高级-管道 顶

要在实例中查看行为(查看源代码),请更改模板中的和可选的指数。 功率提升计算器 更新模板以测试自定义管道并不是很有趣。...如果你点击reset按钮,Angular用原有英雄的新列表替换heroes并更新显示。 如果您添加了删除或更改英雄的功能,Angular会检测这些更改更新显示。...Angular忽略(复合)对象内的更改。 如果您更改输入月份,添加到输入列表或更新输入对象属性,它将不会调用纯管道。 这看起来很有限制,但速度也很快。...--> 您通过文本字符串来识别排序字段,期望管道通过索引引用属性(如hero...不幸的是,主动减少操纵Hero属性名称让Hero.name和Hero.planet成为Hero.a和Hero.b. 显然 hero[”name“] 不起作用

6.4K20
  • AngularDart4.0 指南- 显示数据 顶

    用插显示组件属性 显示组件属性的最简单方法是通过插来绑定属性名称。 使用插,可以将属性名称放在视图模板中,并用双花括号括起来:{{myHero}}。...按照设置说明创建名为displays_data的新项目。 然后通过更改模板和组件的主体来修改app_component.dart文件。...> ''', Angular会自动从组件中抽取title和myHero属性,并将这些插入到浏览器中。...当这些属性改变时,Angular会更新显示。 更准确地说,重新显示是在与视图相关的某种异步事件之后发生的,例如按键,计时器完成或对HTTP请求的响应。...在任一种样式中,模板数据绑定都具有对组件属性的相同访问权限。 用* ngFor显示一个列表属性 要显示英雄列表,首先向组件添加英雄名字列表,并将myHero重新定义为列表中的第一个名字。

    5.3K10

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

    没有明显的副作用 模板表达式不应该更改目标属性以外的任何应用程序状态。 这个规则对Angular的“单向数据流”策略是必不可少的。您不必担心读取组件可能会改变一些其他的显示。...就是如何从用户操作更新应用程序状态。 响应事件是Angular的“单向数据流”的另一面。在事件循环的这个周期中,您可以自由地在任何地方进行所有更改。...属性绑定([property]) 编写一个模板属性绑定来设置一个视图元素的属性。 该绑定将该属性设置为模板表达式的。 最常见的属性绑定将元素属性设置为组件属性。...Angular可能会或可能不会显示更改。Angular可能会检测到更改并发出警告错误。通常来说,保留数据属性和方法返回就够了。...以前缀attr开头,后跟一个点(.)和属性名称代替括号之间的元素属性然后使用解析为字符串的表达式来设置属性

    5.2K10

    AngularDart4.0 英雄之旅-教程-08HTTP 顶

    然后使用_extractData辅助方法来解码响应主体。 响应JSON有一个单一的数据属性,它拥有主叫方想要的英雄列表。 所以你抓住这个列表并把它作为已解决的Future返回。...未更改的getHeroes API 尽管您对getHeroes()和getHero()做了重大的内部更改,但公共签名没有更改。 你仍然从这两种方法返回一个未来。 您不必更新任何调用它们的组件。...更新英雄的细节 尝试在英雄详情视图中编辑英雄的名字。 当你输入时,英雄的名字在视图标题中被更新。 但是,如果您单击后退按钮,更改将丢失。 更新之前没有丢失。 什么改变了?...刷新浏览器,更改英雄名称,保存更改然后单击浏览器“后退”按钮。 现在应该继续进行更改。 添加加入英雄的能力 要添加英雄,应用程序需要英雄的名字。 您可以使用与添加按钮配对的输入元素。...如果用户使用鼠标操作粘贴文本,则会触发更改事件绑定。 正如所料,* ngFor从组件的英雄属性重复英雄对象。 但正如你很快就会看到的,英雄的财产现在是一个英雄列表的流,而不仅仅是一个英雄名单。

    11K30

    AngularDart 4.0 高级-生命周期钩子 顶

    日志确认输入属性(在这种情况下的name属性)在构造时没有分配的。...构造函数不应仅仅将初始局部变量设置为简单。 ngOnInit是组件获取其初始数据的好地方。 教程和HTTP章节显示了如何。 还要记住,指令的数据绑定输入属性在构建之后才会设置。...日志条目显示为power属性更改的字符串。 但ngOnChanges并没有捕捉到hero.name的变化,这一开始令人惊讶。 当输入属性改变时,Angular只会调用钩子。...hero属性是对hero对象的引用。 Angular并不在意英雄自己的name属性发生了变化。 英雄对象引用没有改变,所以从Angular的角度来看,没有改变的反馈!...以下AfterContent挂钩根据内容子代(只能通过使用@ContentChild注解的属性查询它)中的进行更改

    6.2K10

    Angular 6.x 基础教程

    true even: boolean —— 若当前项的索引是偶数,则返回 true odd: boolean —— 若当前项的索引是奇数,则返回 true 需要注意的是,*ngFor 中的 * 号是语法糖...需要注意的是,当 SimpleFormComponent 组件类的属性名称不是 message 时,我们需要告诉 Angular 如何进行属性绑定,具体如下: export class SimpleFormComponent...第十节 - 组件样式 在 Angular 中,我们可以在设置组件元数据时通过 styles 或 styleUrls 属性,来设置组件的内联样式和外联样式。...使用 ngStyle 指令 ngStyle 指令让我们可以方便得通过 Angular 表达式,设置 DOM 元素的 CSS 属性。...对于一些场合,我们也可以直接利用 Angular 属性绑定的语法,来快速设置元素的样式。

    15.6K20

    AngularDart 4.0 高级-结构指令 顶

    属性指令改变元素,组件或其他指令的外观或行为。 例如,内置的NgStyle指令可以同时更改多个元素样式。 您可以将许多属性指令应用于一个宿主元素。 您只能将一个结构指令应用于宿主元素。...这些是两个NgFor输入属性的名称。 这就是指令如何得知列表是heroes,并且track-by功能是trackById。 当NgFor指令遍历列表时,它会设置并重置其自己的上下文对象的属性。...Angular将它们设置为上下文的index和odd 属性的当前。 没有指定let-hero的上下文属性。 它的原意是隐含的。...Angular设置let-hero为上下文的$implicit属性NgFor已经用当前迭代的hero初始化了它的。 API指南描述了额外的NgFor指令属性和上下文属性。...,Angular就会设置myUnless属性

    16.1K20

    Angular 中结构指令模式 - 它们是什么且怎么使用

    属性指令修改 DOM 元素的外观或者行为。结构指令添加或者移除 DOM 元素。 结构指令是 Angular 中最强大的特性之一,然而它们却频繁被误解。...*ngIf - 根据表达式返回的布尔,有条件地包含一个模版(即条件渲染模版) *ngFor - 遍历数组 *ngSwitch - 渲染每个匹配的是图 下面是一个结构化指令的例子。...这会将其转换为方括号 [] 中的属性绑定,比如 [ngIf]。 的其余部分,包含类名,插入到 里。...然后根据我们在指令中设置的条件或者表达式添加、删除或者替换元素。 结构指令的例子 我们添加些简单的 HTML 代码。...指令 我们使用 *ngFor 指令来遍历数组。

    3.8K20

    AngularDart4.0 指南- 表单 顶

    创建一个模型 当用户输入表单数据时,您将捕获其更改更新模型的实例。 直到你知道模型是什么样子,你才能布置表格。 一个模型可以像“钱包”一样简单,掌握关于应用程序重要事实的事实。...显示数据教导属性绑定。 用户输入显示如何使用事件绑定监听DOM事件以及如何使用显示的值更新组件属性。 现在您需要同时显示,聆听和提取。...如果您现在运行应用程序并更改每个英雄model属性,表单可能会显示如下: ? 靠近表单顶部的诊断确认所有的更改都反映在model中。 从模板中删除诊断绑定,因为它已经达到了目的。...刷新浏览器,然后按照下列步骤操作: 1.看看名字输入。 它有一个绿色的边框。 它具有类形式控制和有效性。 2.通过添加一些字符来更改name。 类保持不变。 3.删除名称。 输入框边框变为红色。...您可以通过根据名称控制的状态设置的隐藏属性来控制错误消息的可见性。

    17.5K30

    AngularDart4.0 英雄之旅-教程-04明细 顶

    当您进行更改时,请通过重新加载浏览器窗口来保持运行。 应用程序重构 在添加新功能之前,您可以从应用程序重构中受益。 应用模板文件 您将对应用程序组件的模板进行多次更新。...在显示数据的Showing a list property with *ngFor部分阅读更多关于ngFor和模板输入变量和模板语法页的ngFor部分 在节点内添加内容hero模板变量来显示英雄属性...添加一个onSelect()方法,将selectedHero属性设置为用户单击的英雄。...然后添加ngIf核心指令并将其设置为selectedHero!= null。lib/app_component.html (ngIf) <div *ngIf="selectedHero !...您了解了如何在组件模板中使用核心指令ngIf和<em>ngFor</em>。 您在CSS文件中定义了样式,并使用它们来<em>设置</em>应用程序的样式。 你的应用应该看起来像这个实例(查看源代码)。

    3K30

    Angular系列教程-第四节

    两者都从视图中捕获用户输入事件、验证用户输入、创建表单模型、修改数据模型,并提供跟踪这些更改的途径 使用’@angular/forms’库中的FormGroup, FormControl,FormArray...和更新) formgroup使用 表单提交 更新部分内容(patchValue) 表单验证(导入Validators,设置字段属性) 表单状态(status) formarray(管理任意数量控件...minLength 此验证器要求控件的长度大于等于所指定的最小长度。当使用 HTML5 的 minlength 属性时,此验证器也会生效。...maxLength 此验证器要求控件的长度小于等于所指定的最大长度。当使用 HTML5 的 maxLength 属性时,此验证器也会生效。 pattern 此验证器要求控件的匹配某个正则表达式。...结构型指令 — 通过添加和移除 DOM 元素改变 DOM 布局的指令,比如ngfor、ngif 属性型指令 — 改变元素、组件或其它指令的外观和行为的指令,比如ngstyle 6.属性型指令 6.1

    2.8K50

    ionic3升级适配angular5

    首次支持angular5的ionic3版本 然后再看下angular5的版本,同样发布了两个版本,一个是普通稳定版,一个是beta版,其中前者如图所示修复了几个bug,那若升级,当然选择普通稳定版比较好...于是我们升级的步骤如下: 一、更新包依赖 删除package-lock.json和node_modules,然后修改package.json如下: "dependencies" : { ......: ---- 更改内容: I18n更改; 内置管道如Date、Currency、Percent的更改; 弃用内容: compiler: ngGetContentSelectors()在v4版本被移除,现在用...版本被弃用并移除,现用TrackByFunction代替; http: 弃用 @angular/http,转为使用@angular/common/http; router: RouterOutlet的两个属性...locationInjector、locationFactoryResolver在v4版本被弃用,现移除; router: 路由参数initialNavigation的:true, false, legacy_enabled

    2.5K40

    AngularDart4.0 指南- 用户输入 顶

    每次调用之后,onKey()方法将输入框附加到组件的values属性,后跟一个分隔符(|)。 该模板使用Angular插({{...}})来显示属性。...代码使用box变量来获取输入元素的,并在标签之间进行插显示。 模板是完全独立的。 它不绑定到组件,组件什么也不做。 在输入框中输入内容,然后观看每个按键显示更新。 ?...除非你绑定一个事件,否则这根本不起作用。 Angular仅在应用程序响应异步事件(如击键)时才更新绑定(以及屏幕)。 这个例子绑定了keyup事件到数字0,尽可能最短的模板语句。...只有当用户按下Enter时,组件的value属性才会更新。 要解决此问题,请同时听取Enter键和blur事件。...双向数据绑定是在数据输入字段和模型属性之间移动的更优雅和紧凑的方式。 下一页,Forms介绍了如何使用NgModel编写双向绑定。

    3.5K00
    领券