为什么在ControlValueAccessor中"writeValue"时,ngOnChanges不会触发?我通过registerOnChange发出一些事件,但我没有看到ngOnChanges中的任何动作
const CUSTOM_INPUT_CONTROL_VALUE_ACCESSOR = new Provider(
NG_VALUE_ACCESSOR, {
useExisting: forwardRef(() => CustomInput),
multi: true
});
@Component({
moduleId: module.id,
selector: 'custom-input',
templateUrl: 'custom-input.html',
styleUrls: ['custom-input.css'],
directives: [CORE_DIRECTIVES],
providers: [CUSTOM_INPUT_CONTROL_VALUE_ACCESSOR]
})
export class CustomInput implements ControlValueAccessor{
private _text: any = '';
public isValid:boolean = false;
onChange: EventEmitter<any> = new EventEmitter();
onTouched: any;
constructor(private ngControl:NgControl) {
}
ngOnChanges(e) {
console.log('ngOnChanges');
}
get text(): any { return this._text; };
set text(v: any) {
if (v !== this._text) {
this._text = v;
this.onChange.emit(v);
}
}
writeValue(v) {
this.text = v;
}
registerOnChange(fn): void {
this.onChange.subscribe(fn);
}
registerOnTouched(fn): void {
this.onTouched = fn;
}
}
Run Code Online (Sandbox Code Playgroud)
ngOnChanges当属性改变时被调用@Input()。
假设您的自定义输入有一个文本属性:
export class CustomInput implements OnChanges {
@Input() text;
ngOnChanges() {
console.log('ngOnChanges');
}
}
Run Code Online (Sandbox Code Playgroud)
然后ngOnChanges当变化时会被调用someVariable:
<custom-input [text]="someVariable"></custom-input>
Run Code Online (Sandbox Code Playgroud)
从组件内部进行的更改不会触发回调。ngOnChanges纯粹用于输入。
https://angular.io/guide/lifecycle-hooks#lifecycle-sequence
注意:ngOnChanges之前也调用过ngOnInit
| 归档时间: |
|
| 查看次数: |
625 次 |
| 最近记录: |