【问题标题】:Angular 5 reactive form valueChanges does not workAngular 5 反应形式 valueChanges 不起作用
【发布时间】:2019-01-17 06:31:55
【问题描述】:

我在服务中有一个表单:

    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
        });
}

但是当我在 textarea 中输入时,我的订阅者没有被调用。

也许它是 relevenat- 但在调用 listenToSearchInput() 之后,在我从服务器获得答案后的服务中,我正在填写描述 -

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

可能是什么原因?

【问题讨论】:

  • descriptionDestroy 定义在哪里
  • 您的代码中的descriptionDestroy 是什么? takeUntil以定时器为参数
  • 不,takeUntil 将任何 observable 作为参数。

标签: javascript angular typescript rxjs


【解决方案1】:

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

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

【讨论】:

  • 但是我的组件中没有任何输入,所以调用这个生命周期?我在问题中添加了另一个信息,谢谢!
  • 我只是想说你需要在onChanges而不是在OnInit中调用你的listenToSearchInput功能
  • 那么您希望 formControl 发生哪些变化?
  • 我只是在听我的 formControl。我有它是因为我注入了服务
  • 好的,我找到了答案——在从服务器获取数据的函数中,我创建了一个新的seetingsForm ....
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-11
    • 2022-10-07
    • 2020-11-30
    • 2017-11-20
    • 2022-07-27
    • 1970-01-01
    • 2018-10-10
    相关资源
    最近更新 更多