Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/464.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 通过ngModel更改对象时不会触发Setter_Javascript_Angular_Typescript - Fatal编程技术网

Javascript 通过ngModel更改对象时不会触发Setter

Javascript 通过ngModel更改对象时不会触发Setter,javascript,angular,typescript,Javascript,Angular,Typescript,我有以下代码: set dynamicData(val) { this.editableData.emit(val); } get dynamicData() { return this.formsData; } 如果我从组件中设置dynamicData值,则会触发setter。 但是如果我使用[(ngModel)]从输入设置dynamicata,则dynamicata的实际值会更改,但由于某种原因,设置器不会触发 以下是输入: <input type="tex

我有以下代码:

set dynamicData(val) {
        this.editableData.emit(val);
}

get dynamicData() {
    return this.formsData;
}
如果我从组件中设置
dynamicData
值,则会触发setter。 但是如果我使用
[(ngModel)]
从输入设置
dynamicata
,则
dynamicata
的实际值会更改,但由于某种原因,设置器不会触发

以下是输入:

<input type="text" name="dynamicDataSender"
                   *ngIf="someCondition"
                   [(ngModel)]="dynamicData.sender"/>

我遗漏了什么吗?

您引用的是
[(ngModel)]=“dynamicData.sender”
而不是
dynamicData
。你应该引用这个对象

如果dynamicata需要成为事件发射器,则不应将其用作属性绑定,而应使用
(onChange)=“modelChanged($event)”
处理程序,在该处理程序中可以向dynamicata发出新值。(
modelChanged(value){this.dynamicData.emit(value);}
)并使用其他一些属性作为ngModel

语法只能设置数据绑定属性。如果您需要做更多或不同的事情,您可以编写扩展表单

 <input type="text" name="dynamicDataSender" #ref
   *ngIf="someCondition"  [ngModel]="dynamicData.sender" (ngModelChange)="dynamicData(ref.value)"/>

这是因为您正在设置
dynamicata.sender
,而不是
dynamicata
本身。更改为
dynamicATA
的内部属性,这意味着将调用getter。
debouncer= new Subject();
  constructor() {


   this. debouncer
    .debounceTime(1000)
    .subscribe((val) =>{ 
      console.log(val);
      this.editableData.emit(val);

    });
  }

set dynamicData(val) {
         this.debouncer.next(value);
}