gpt4 book ai didi

angular - 为什么在更新 ControlValueAccessor 时不会触发 ngOnChanges

转载 作者:太空狗 更新时间:2023-10-29 17:39:52 25 4
gpt4 key购买 nike

当您在 ControlValueAccessor 中“写入值”时,为什么 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;
}

}

最佳答案

ngOnChanges@Input() 属性改变时被调用。

假设您的自定义输入有一个文本属性:

export class CustomInput implements OnChanges {
@Input() text;

ngOnChanges() {
console.log('ngOnChanges');
}
}

然后 ngOnChanges 将在 someVariable 改变时被调用:

<custom-input [text]="someVariable"></custom-input>

在组件内所做的更改不会触发回调。 ngOnChanges 纯粹用于输入。

https://angular.io/guide/lifecycle-hooks#lifecycle-sequence


注意:ngOnChanges 也在 ngOnInit 之前被调用

关于angular - 为什么在更新 ControlValueAccessor 时不会触发 ngOnChanges,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37782577/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com