gpt4 book ai didi

angular - 当组件更新值时,指令@Input 变量没有得到更新

转载 作者:行者123 更新时间:2023-12-04 00:59:54 25 4
gpt4 key购买 nike

我正在尝试根据服务调用结果动态验证自定义文本输入。如果它是 true 意味着 jumpyId 可以使用,否则显示错误。我现在的问题是,当我从 fromEvent 更新 this.isAvailable 时,它​​没有反射(reflect)自定义指令中的值。我期待如果 api 调用返回 true,那么指令应该接收 true 否则 false

AvailableDirective.ts

import { Directive, forwardRef, Input } from '@angular/core';
import { Validator, AbstractControl, NG_VALIDATORS } from '@angular/forms';
@Directive({
selector: 'custom-text-input[vendorAvailable][formControlName],custom-text-input[vendorAvailable][formControl],custom-text-input[vendorAvailable][ngModel]',
providers: [
{ provide: NG_VALIDATORS, useExisting: AvailabilityDirective, multi: true }
]
})
export class AvailabilityDirective implements Validator {

@Input('available') available: boolean;
validate(c: AbstractControl): { [key: string]: any } {
console.log("valid", this.available);
if (!this.available) {
return {
available: false
};
}
return null;
}
}

EventObservable:

fromEvent(this.custom.nativeElement, 'keyup').pipe(
map((event: any) => {
return event.target.value;
})
, debounceTime(1000)
, distinctUntilChanged()
).subscribe((text: string) => {
this.myService.isAvailable(text).subscribe((res) => {
console.log(res);
if (res) {
this.isAvailable = true;
} else {
this.isAvailable = false;
}
}, (err) => {
console.log(err);
});
});

模板:

<custom-text-input *ngIf="drawer"
label="JumpyId"
[(ngModel)]="jumpyId"
id="jumpyId"
name="jumpyId"
required
[available]="isAvailable"
#custom>
</custom-text-input>

最佳答案

添加一个 onChanges 以监视可用的更改

onChange: () => void;

registerOnValidatorChange(fn: () => void): void {
this.onChange = fn;
}

ngOnChanges(changes: SimpleChanges): void {
if ('available' in changes) {
if (this.onChange) {
this.onChange();
}
}
}

如果我的验证指令依赖于另一个输入,我会使用这个验证器库

https://stackblitz.com/edit/angular-cfexiy

关于angular - 当组件更新值时,指令@Input 变量没有得到更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59257462/

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