javascript - Angular:访问器不进行双向绑定
问题描述
我正在尝试为具有关联标签的输入编写访问器组件,但我不确定我是否正确执行此操作。当我尝试进行双向绑定时,即使在 class 中设置了值,也不会在输入字段中设置该值MyComponent
。
为什么我的双向绑定不起作用?我希望看到Something Special
里面<input>
就是里面<third-party-input>
。但是,输入为空。
当单独使用<third-party-input>
时,双向绑定在那里工作,只是当我将组件包裹在它周围时。
主要部件
<ui-input [(ngModel)]="myValue"></ui-input>
export class MyComponent {
public myValue = 'Something Special';
}
带标签组件的输入
<label>{{label}}</label>
<third-party-input [(ngModel)]="value"></third-party-input>
@Component({
selector: 'ui-input',
templateUrl: './input.component.html',
providers: [{
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(() => InputComponent),
multi: true
}]
})
export class InputComponent extends AccessorComponent {}
@Component({
selector: 'app-accessor',
template: ''
})
export abstract class AccessorComponent implements ControlValueAccessor {
protected _value: any;
public get value() {
return this._value;
}
public set value(val) {
this._value = val;
this.onChange(val);
this.onTouched();
}
protected onChange = (_: any) => { };
protected onTouched: any = () => { };
public registerOnChange(fn: (_: any) => void): void {
this.onChange = fn;
}
public registerOnTouched(fn: () => void): void {
this.onTouched = fn;
}
public writeValue(value: any): void {
if (value !== undefined) {
this._value = value;
}
}
}
解决方案
推荐阅读
- python-3.x - 从 DataFrame 中替换切片并将其放在末尾
- java - Spring REST获取多个映射端点的url路径
- python - 使用 python 从 Salesforce 导入数据
- android - 如何获取前两个选择器意图并仅在android中为用户显示它们
- android - 使用 adb 进行深度链接,而不是在浏览器中
- angular - RxJs 间隔中的新请求
- python - Django:获取从一个视图启动的子进程(运行/完成)的状态并将其显示到另一个视图
- postgresql - 无法通过 Apache Tomcat 连接到 Postgres DB?
- binary-decision-diagram - 在 CUDD 中传递布尔表达式时出错(在 BuDDy 中工作)
- amazon-web-services - 将来自应用程序的日志存储在 Kubernetes 中