angular - [ngModel] 和 (ngModelChange) 如何协同工作?

标签 angular typescript

我是 Angular 的新手,正在学习 Angular 6。我了解 ngModel。但是当我尝试使用 ngModelChange 时,出现了一些问题。

我有一个html元素 HTML

<input #input  type="text" [value]="name" [(ngModel)] ="name" (ngModelChange) ="change(input.value)"/>

typescript

change(event :any) {
    this.name = event;
    console.log(this.name);
}

更改输入中的值后,我可以看到名称属性的更改。

当我把html代码改成

HTML

<input #input type="text" [value]="name"  [ngModel] ="name" 
(ngModelChange)="change(input.value)" />
{{ name }}

TS

change(event :any) {
    this.name = event;
    console.log(this.name);
}

它在控制台和 UI 中都按预期正常工作。

问题一

<input #input  type="text" [value]="name" [(ngModel)] ="name" 
(ngModelChange) ="change(input.value)"/>

&

<input #input type="text" [value]="name"  [ngModel] ="name" 
(ngModelChange)="change(input.value)" />

一样吗??

问题二。

当我删除 [ngModel] 指令时。 ngModelChange 没有被触发。 [ngModel] 是必须的吗?如果是,为什么?

HTML

<input #input type="text" [value]="name" 
(ngModelChange)="change(input.value)" />
<br/>
<br/>
{{ name }}

TS

change(event: any) {
     this.name = event;
     console.log(this.name);
 }

这会很有帮助。 提前致谢。

最佳答案

The [()] syntax is easy to demonstrate when the element has a settable property called x and a corresponding event named xChange. Here's a SizerComponent that fits this pattern. It has a size value property and a companion sizeChange event

https://angular.io/guide/template-syntax#basics-of-two-way-binding

所以,它们是等价的。

<input [(ngModel)]="name"/>
<input [ngModel]="name" (ngModelChange) ="name = $event"/>

但是如果没有相应的属性,那么xChange将不起作用。

<input (ngModelChange) ="name = $event"/>

关于angular - [ngModel] 和 (ngModelChange) 如何协同工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57901940/

相关文章:

angular - 从可观察到的填充表单 - Angular2

angular - 在 IIS 默认网站下托管 .Net Core 应用和 Angular 应用

angular - 结构指令可以使用@ContentChild 引用子组件吗?

css - 如何动态更改数组中显示的样式文本组件的属性?

typescript - 为什么通用类型 "T extends ' a' | 'b'“在检查参数是否等于联合类型值的情况下未正确解析?

typescript 找不到本地链接的模块?

android - 如何为 iOS 通用链接和 Android Assets 链接设置 Angular 项目以在 native 移动应用程序中打开链接

javascript - *ngFor Angular 通过具有不同键和级别的嵌套数组

typescript - 如果文件未打开,Vscode 不会显示 typescript 错误

javascript - (TypeScript) 由对象文字定义的类型别名/接口(interface)