<input ...>
当模板中带有标签的自定义指令在角度形式内时,我遇到了问题。
如果您在表单中声明输入,则编辑输入字段将按预期更改表单的属性,例如原始、触摸、有效等。
如果您在表单中声明自定义指令,比如说<ac2-string-input ...></ac2-string-input>
它的模板包含一个输入,那么如果您编辑此输入的字段,它将不会改变表单的属性。
这是为什么?那是一个错误吗?有什么解决方法吗?
下面你有一个例子:
我们可以有一个表单组件,在app/form.component.ts
import { Component } from '@angular/core'
import { InputComponent } from './input.component'
@Component({
selector: 'ac2-form',
templateUrl: '<build path>/templates/form/form.html',
directives: [InputComponent]
})
export class FormComponent {
item: Object = {
attr1: 'blah',
attr2: 'another blah'
}
constructor(){}
submit(){ console.log(this.item) }
}
带有模板templates/form/form.html
<form #f="ngForm" (ngSubmit)="submit()">
<input type="text" name="attr1" [(ngModel)]="item.attr1"/>
<ac2-string-input [obj]="item"></ac2-string-input>
<button type="submit">Submit</button>
</form>
<div>
Pristine? {{f.form.pristine}}
</div>
并且ac2-string-input指令在app/form/input.component.ts中定义
import { Component, Input } from '@angular/core'
@Component({
selector: 'ac2-string-input',
templateUrl: '<build path>/templates/form/input.html'
})
export class InputComponent {
@Input() obj: Object;
constructor(){}
}
带有模板templates/form/input.html
<input type="text" name="attr2" [(ngModel)]="obj.attr2"/>
如果我们加载表单,将会有两个文本字段,并且表单将是“Pristine”
如果我们编辑“attr2”字段,表单将继续保持原始状态,就好像该字段没有绑定到表单一样!
如果我们编辑“attr1”字段,表单将不会像预期的那样是原始的。