Vij*_*jay 7 typescript angular
我是 angular 的新手,我正在学习 Angular 6。我了解 ngModel。但是当我尝试使用 ngModelChange 时,提出了一些问题。
我有一个 html 元素 HTML
<input #input type="text" [value]="name" [(ngModel)] ="name" (ngModelChange) ="change(input.value)"/>
Run Code Online (Sandbox Code Playgroud)
打字稿
change(event :any) {
this.name = event;
console.log(this.name);
}
Run Code Online (Sandbox Code Playgroud)
更改 input 中的值后,我可以看到 name 属性的更改。
当我将 html 代码更改为
HTML
<input #input type="text" [value]="name" [ngModel] ="name"
(ngModelChange)="change(input.value)" />
{{ name }}
Run Code Online (Sandbox Code Playgroud)
TS
change(event :any) {
this.name = event;
console.log(this.name);
}
Run Code Online (Sandbox Code Playgroud)
它在控制台和 UI 中按预期工作正常。
问题 1
<input #input type="text" [value]="name" [(ngModel)] ="name"
(ngModelChange) ="change(input.value)"/>
Run Code Online (Sandbox Code Playgroud)
&
<input #input type="text" [value]="name" [ngModel] ="name"
(ngModelChange)="change(input.value)" />
Run Code Online (Sandbox Code Playgroud)
一样吗??
问题2。
当我删除 [ngModel] 指令时。ngModelChange 没有被触发。必须拥有 [ngModel] 吗?如果是,为什么?
HTML
<input #input type="text" [value]="name"
(ngModelChange)="change(input.value)" />
<br/>
<br/>
{{ name }}
Run Code Online (Sandbox Code Playgroud)
TS
change(event: any) {
this.name = event;
console.log(this.name);
}
Run Code Online (Sandbox Code Playgroud)
这将是一个很大的帮助。提前致谢。
ad问题1) 它们与你写的不一样。写作
<input [(ngModel)]="name" (ngModelChange)="change(input.value)"/>
Run Code Online (Sandbox Code Playgroud)
如果您只想设置变量值,那么实际上没有意义,因为 (banana-in-a-box) 表达式[(ngModel)]本身只是语法糖
[ngModel]="name" (ngModelChange)="name = $event"
所以你的例子会导致:
<input [ngModel]="name" (ngModelChange)="name = $event" (ngModelChange)="change(input.value)"/>
Run Code Online (Sandbox Code Playgroud)
ad 问题 2)
是的,您至少需要[ngModel]="name"表达式才能激活 Angular 指令。我们可以在Angular 源代码本身的 NgModel 指令的选择器中看到:
@Directive({
selector: '[ngModel]:not([formControlName]):not([formControl])',
providers: [formControlBinding],
exportAs: 'ngModel'
})
export class NgModel extends NgControl implements OnChanges,
OnDestroy {
...
...
@Output('ngModelChange') update = new EventEmitter();
...
Run Code Online (Sandbox Code Playgroud)
当元素具有名为 x 的可设置属性和名为 xChange 的相应事件时,[()] 语法很容易演示。这是一个适合这种模式的 SizerComponent。它有一个 size value 属性和一个伴随的 sizeChange 事件
https://angular.io/guide/template-syntax#basics-of-two-way-binding
所以,它们是等价的。
<input [(ngModel)]="name"/>
<input [ngModel]="name" (ngModelChange) ="name = $event"/>
Run Code Online (Sandbox Code Playgroud)
但是如果没有对应的属性,那么xChange就行不通了。
<input (ngModelChange) ="name = $event"/>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7953 次 |
| 最近记录: |