我有一个 ControlValueAccessor 指令,它执行值格式化,但@HostBinding('value')
它只在第一次工作。
@Component({
selector: 'my-app',
template: `
Value: {{value}}<br/>
<input type="text" uppercase [(ngModel)]="value">
<button type="button" (click)="reset()">Reset</button>
`,
})
export class AppComponent {
value = 'Angular ' + VERSION.major;
reset() {
this.value = 'Reset';
}
}
@Directive({
selector: 'input[uppercase]',
providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => UpperCaseInputDirective), multi: true }],
})
export class UpperCaseInputDirective implements ControlValueAccessor {
@HostBinding('value') lowerValue = '';
...
}
请在https://stackblitz.com/edit/angular-ivy-vfahu3?file=src%2Fapp%2Fapp.component.ts查看完整示例
- 当我第一次单击“重置”按钮时,按预期将 ngModel 设置为“重置”并将文本设置
<input>
为“重置”。 - 然后我将输入值编辑为“Test”,并将值作为“TEST”传播回模型,如预期的那样。
- 当我第二次单击“重置”按钮时,ngModel 按预期设置为“重置”,但文本
<input>
保留为“测试”。我希望它会像第 1 点一样更改为“重置”。
你能解释一下这种行为吗?有什么线索吗?
旁注:我知道上面的示例可以通过其他方式实现,但这只是我使用的情况的简化,<input type="datetime-local>
并且指令将输入值转换为 ISO 格式。