Angular 5反应形式valueChanges不起作用

时间:2019-01-17 06:31:56

标签: javascript angular typescript rxjs

我在服务中有一个表格:

    this.settingsForm = this.formBuilder.group({
        names: this.formBuilder.array([]),
        globalIDs: this.formBuilder.array([]),
        topics: this.formBuilder.array([]),
        emails: this.formBuilder.array([]),
        description: ''
    });

为方便起见而使用吸气剂-

get description(): FormControl{
    return this.settingsForm.get('description') as FormControl;
}

在某些指令中,我正在注入服务,并有一个附加到此控件的输入。 html-

<textarea matInput
          [formControl]="settingsDataService.description">
</textarea>

在指令中,我有一个侦听器:

 ngOnInit() {
        this.listenToSearchInput();
    }

listenToSearchInput() {
    this.settingsDataService.description.valueChanges.pipe(
        distinctUntilChanged(),takeUntil(this.descriptionDestroy))
        .subscribe(value => {
          //DO SOMETHING
        });
}

但是当我在文本区域中键入内容时,我的订户不会被呼叫。

也许是相对的,但是在调用listenToSearchInput()之后,在服务中,当我从服务器得到答案后,我将通过-

this.settingsForm.patchValue({description:description});

可能是什么原因?

2 个答案:

答案 0 :(得分:0)

可能您需要在指令的onChanges生命周期挂钩中调用该函数。

onChanges(): void {
   this.settingsDataService.description.valueChanges.pipe(
        distinctUntilChanged(),takeUntil(this.descriptionDestroy))
        .subscribe(value => {
          //DO SOMETHING
        });
}

答案 1 :(得分:0)

我在从服务器获取数据的函数中找到了答案-,我创建了一个新的seetingsForm来清理以前的数据。