Angular + ng-antd-zorro 踩坑指南

前言

此文章主要收集自己在用angular+antd过程中所遇到的坑,以及angular框架所遇到的一些难题。

1、表单中动态绑定数据报错:ngModel cannot be used to register form controls with a parent formGroup directive. Try using; formGroup’s partner directive “formControlName” instead.

这个报错的意思就是 当我们在表单中手动去动态绑定数据的时候,没使用表单的formControlName来进行数据绑定。因为表单在我看来属于一个房子,你想在我这里面做什么事,你就得听我的,你不能私自为所欲为。

比如我们给input动态绑定

<input nz-input placeholder="请输入" [(ngModel)]="value" />

这时候需要添加一个属性:

<input nz-input placeholder="请输入" [(ngModel)]="value" [ngModelOptions]="{standalone: true}" />

把当前数据组件变成 独立的即可,就不会受form表单控制了。不止input,包括其他的表单组件,select…等。

2、ngFor循环绑定input框动态数据报错:Cannot assign value “$event” to template variable “item”. Template variables are read-only.

代码演示:

<div class="a" *ngFor="let item of list;">
  <input nz-input placeholder="请输入" [(ngModel)]="item" />
</div>

修改:

<div class="a" *ngFor="let item of list; let index = index;">
  <input nz-input placeholder="请输入" [(ngModel)]="list[index]" />
</div>

3、ngFor循环绑定input输入框时,当我们输入的时候,每输入一个字符(点击键盘),input框就会失去焦点

这个问题就跟vue中的key有关系,当我们输入的时候,Angular看到了新的对象引用组成的新的列表,它只能用所有新的 DOM 元素替换旧的 DOM 元素,导致input也是新的input了,就会失焦。
我们解决办法,就是追踪index下标值。

代码演示:

<div class="a" *ngFor="let item of list; let index = index;">
  <input nz-input placeholder="请输入" [(ngModel)]="list[index]" />
</div>

修改:

<div class="a" *ngFor="let item of list; let index = index; trackBy: trackByFn;">
  <input nz-input placeholder="请输入" [(ngModel)]="list[index]" />
</div>

public trackByFn(index: number): number {
	return index;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张_大_炮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值