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

ngFor内部的动态ngModel不工作

ngFor是Angular框架中的一个指令,用于在模板中循环渲染一组数据。ngModel是Angular框架中的双向数据绑定指令,用于将数据模型与表单元素进行绑定。

在ngFor内部使用动态ngModel时,可能会遇到不工作的情况。这通常是由于Angular的变更检测机制导致的。当使用ngFor循环渲染一组数据时,Angular会为每个循环项创建一个独立的作用域,这意味着每个动态ngModel都处于自己的作用域中。

解决这个问题的一种常见方法是使用索引来创建唯一的ngModel绑定。可以通过在ngFor指令中使用let i=index来获取当前循环项的索引,然后在ngModel中使用该索引来创建唯一的绑定。例如:

代码语言:html
复制
<div *ngFor="let item of items; let i=index">
  <input [(ngModel)]="items[i].value">
</div>

这样每个ngModel都会与items数组中的对应项进行绑定,确保了每个ngModel的唯一性。

另外,还可以考虑使用FormControl来替代动态ngModel。FormControl是Angular中的一个表单控件,可以更灵活地处理表单数据。可以在组件中创建一个FormControl数组,并在ngFor中使用FormControl来绑定表单元素。例如:

代码语言:html
复制
<div *ngFor="let item of items; let i=index">
  <input [formControl]="formControls[i]">
</div>

在组件中创建FormControl数组:

代码语言:typescript
复制
import { FormControl } from '@angular/forms';

// ...

formControls: FormControl[] = [];

// 在初始化时为每个循环项创建FormControl
ngOnInit() {
  this.items.forEach(() => {
    this.formControls.push(new FormControl());
  });
}

这样可以更好地管理表单数据,并且避免了动态ngModel的问题。

总结起来,解决ngFor内部动态ngModel不工作的方法有两种:使用索引创建唯一的ngModel绑定,或者使用FormControl来替代动态ngModel。具体选择哪种方法取决于实际需求和项目的架构。

腾讯云相关产品和产品介绍链接地址:

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

相关·内容

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

幸运是,Angular NgModel指令是一个使元素形成双向绑定桥梁。 内置指令 早期版本Angular包含了七十多个内置指令。 社区贡献了更多,并且为内部应用程序创建了无数私人指令。...NgModel:双向数据绑定到HTML表单元素。 NgClass 您通常通过动态添加和删除CSS类来控制元素显示方式。 你可以绑定到ngClass来同时添加或删除多个类。...NgStyle 您可以根据组件状态动态设置内联样式。 使用NgStyle,您可以同时设置多个内联样式。 样式绑定是设置单个样式值简单方法。...别名输入/输出属性 有时输入/输出属性公共名称应与内部名称不同。 属性指令通常是这种情况。指令消费者希望绑定到指令名称。 ...指令名很少描述属性作用。 myClick指令名称对于发出点击消息属性不是一个好名字。 幸运是,您可以创建符合常规期望属性公共名称,同时在内部使用不同名称。

30K20
  • Angular 6.x 表单快速入门

    Driven 表单特点 使用方便 适用于简单场景 通过 [(ngModel)] 实现数据双向绑定 自动生成 Form Model (异步) 最小化组件类代码 不易于单元测试 Reactive 表单特点...比较灵活 适用于复杂场景 简化了HTML模板代码,把验证逻辑抽离到组件类中 手动创建 Form Model (同步) 方便跟踪表单控件值变化 易于动态添加表单控件 易于单元测试 本文主要介绍...在 Angular 中表单控件有以下状态,我们可以通过 #userName="ngModel" 方式获取 ngModel 对象,进而获取控件状态信息。...]="versions[0]"> <option *ngFor="let version of versions;" [value]="version"> {{version...]="version" required> <option *ngFor="let version of versions;" [value]="version

    4.6K20

    angular知识点梳理第二篇-基本语法

    文章目录 前文回顾 基本语法 常见指令 NgModel NgFor NgIf Ng-container 管道 前文回顾 前面已经写了关于angular项目的基本介绍和如何创建一个angular项目,这一篇主要梳理一些...angular基本语法,这样有利于后面我们进行梳理别的知识点做一些铺垫 基本语法 常见指令 NgModel NgModel就和vue中v-model效果是一致,只是写法会有一些区别,vue中是可以直接进行使用...-- [(ngModel)] 是angular绑定数据语法 --> {{inputData}} 运行效果 NgFor NgFor和我们js中for循环渲染数据是一致,所以这里是比较容易理解,简单演示一下...-- 默认是没有key,这里需要key地方需要给index重新赋值, --> {{item.title}}

    2.5K30

    AngularDart4.0 指南- 表单 顶

    在开发表单时,创建一个数据录入体验非常重要,该体验可以通过工作流高效地引导用户。...您将学习如何构建一个模板驱动表单,如下所示: ? 英雄就业机构使用这种形式来维护关于英雄个人信息。 每个英雄都需要一份工作。 让正确英雄与正确危机相匹配是公司使命。...没有绑定或额外指令,只是布局。 在模板驱动表单中,如果已经导入了angular_forms库,则不必为了使用库功能而对标记执行任何操作。 继续看看这是如何工作。 刷新浏览器。...你会看到一个样式化表单! 使用* ngFor添加powers 英雄必须从一个固定机构批准权力列表中选择一个超级大国。 您在内部维护该列表(在HeroFormComponent中)。...在内部,Angular创建NgFormControl实例,并使用Angular附加到标签NgForm指令注册它们。

    17.5K30

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

    如果您结构匹配,请返回该页面以弄清楚您错过了什么。 ? 如果该应用尚未运行,请启动该应用。 当您进行更改时,请通过重新加载浏览器窗口来保持运行。.../app_component.dart (hero import) import 'src/hero.dart'; 刷新浏览器,程序将正常运行,现在添加新功能准备工作就做好了。...通过添加核心指令* ngFor修改标签。 ngFor前缀(*)是此语法关键部分。...在显示数据Showing a list property with *ngFor部分阅读更多关于ngFor和模板输入变量和模板语法页ngFor部分 在节点内添加内容hero模板变量来显示英雄属性...一个应用程序不应该是一个单一组件。 在下一页中,您将将应用程序拆分为子组件,并使它们一起工作

    3K30

    浅谈Angular

    1.准备工作: ①全局安装 Angular CLI。...,即Model向View 如果要实现双向绑定,需要使用到ngModel指令 语法: [(ngModel)]='值' ***直接写指令,在angularJS里会报错,需要人为引入FormsModule...ng-show本质上设置元素display值为none,只是设置样式,DOM结构还在,而*ngIf是真正意义上从DOM结构中移除 *ngFor--动态创建DOM结构 ngSwitch--通过匹配case...可以给@Input装饰器内部填写一个元数据,这个值是外部使用名字 内部还是使用原来名字 3.如果想要给指令添加元素绑定事件,需要使用@HostListener装饰器 如果要通过指令控制DOM显隐... 参数订阅(RxJS) 遇到问题:数据不会及时更新,原因:组件ngOnInit方法只会在其被创建时走一次,如果该组件销毁,init方法不会再走,导致当前数据无法更新 解决办法

    4.4K10

    Angular系列教程-第四节

    等将数据和视图进行绑定(需要引入ReactiveFormsModule) 模板驱动表单是我们实例化好一个类数据之后,在html中使用 NgForm 指令后将数据和表单进行绑定,使用[(ngModel...它会控制那些带有 ngModel 指令和 name 属性元素,监听他们属性。...总结 响应式表单是动态,模板驱动表单是固定 2.响应式表单使用 注册ReactiveFormsModule 组件导入FormControl 模板中注册组件 控件值(获取setvalue...status) formarray(管理任意数量控件) 表单验证 同步验证器和异步验证器 备注:同步验证先执行,异步验证后执行 3.模板驱动表单使用 导入formcontrol 使用ngModel...结构型指令 — 通过添加和移除 DOM 元素改变 DOM 布局指令,比如ngfor、ngif 属性型指令 — 改变元素、组件或其它指令外观和行为指令,比如ngstyle 6.属性型指令 6.1

    2.8K50

    AngularDart4.0 指南-体系结构概述 顶

    虽然根模块可能是小应用程序中唯一模块,但大多数应用程序都有更多功能模块,每个模块都是专用于应用程序域,工作流程或紧密相关一组功能一致代码块。...类似于* ngFor,{{hero.name}},(click),[hero]和代码使用Angular模板语法。...数据绑定在模板及其组件之间通信中起着重要作用。 数据绑定对于父组件和子组件之间通信也很重要。 指令 ? Angular模板是动态。...HeroService取决于日志服务和另一个处理服务器频繁通信工作BackendService。...组件类应该是精益。 他们不从服务器获取数据,验证用户输入或直接登录到控制台。 他们将这些任务委托给服务。 一个组件工作是启用用户体验,仅此而已。

    7.9K30

    了解 SpringBoot 内部工作原理

    今天,我们将深入研究 SpringBoot 机制,揭开其工作原理奥秘,并阐明 SpringBoot 自动配置本质。 下面是 SpringBoot 应用程序主类简单示例。...@Conditional 注解 Spring 中注解 @Conditional 是一种强大机制,它允许开发人员根据特定条件有条件地启用或禁用 bean 和配置,它有助于根据指定条件动态地定制应用程序上下文...工作原理如下: 条件注解 @Conditional 作为元注解发挥作用,对其他注解进行操作来建立 bean 创建或配置条件。...开发人员可以根据注入类路径上特定类存在、属性值或特定 bean 存在等因素来定义条件。 条件类 一个常用条件是 @ConditionalOnClass,它检查指定类是否存在于类路径中。...这一行代码封装了设置 SpringBoot 应用程序复杂过程,使开发人员能够以最少配置轻松启动他们应用程序。

    8110

    浅谈 Checkbox Group 双向数据绑定

    在实际工作中发现很多组件库关于 checkbox-group 双向绑定一直很别扭,或者说多多少少都有一些瑕疵。 开始本文之前,我们先假定有如下需求: ? 数据列表和输出值都是对象数组。...也就是说,对于上面展示这种情况,我们必须要做一些额外数据处理工作才能完成目标,但是这对于双向绑定功能来说显得有些繁琐。...)]="selectedCars" [compareWith]="compareWith"> {...[compareWith]="compareWith"> 线上 DEMO 上面的代码没有任何多余过滤筛选就完成了开篇提出需求,对数据操作全都隐藏在双向绑定内部...总结 这篇文章拖沓了非常久,一方面是自己工作很忙,另一方面做开源项目占据了大部分时间。

    2.1K10

    AngularDart4.0 英雄之旅-教程-05多组件 顶

    您需要将其分解为子组件,每个子组件都专注于特定任务或工作流程。 最终,AppComponent可以成为托管这些子组件简单shell。...Snake Case命名法-单词小写且使用下划线分割以_component结束,例:hero_detail_component.dart 内部实现文件应该放在lib / src下。..."> <li *ngFor="let hero of heroes" [class.selected]="hero === selectedHero" (click)="onSelect...该应用程序工作! 应用程序设计更改 和以前一样,每当用户点击一个英雄名字时,英雄详情就会出现在英雄列表下方。 但是现在HeroDetailComponent正在呈现这些细节。...您可以将HeroDetailComponent演变成一个丰富英雄编辑器,而无需触摸父AppComponent。 你可以在触及英雄详情视图情况下演化AppComponent。

    1.8K10
    领券