代码之家  ›  专栏  ›  技术社区  ›  Dale K

不使用第三方地址查找更新被动窗体

  •  0
  • Dale K  · 技术社区  · 6 年前

    我有一个反应式地址表(地址行1,地址行2,镇,县,邮编,国家),这是预期的工作。在开发时,我用 {{ myForm.value | json }} .

    我现在添加了一个第三方地址查找控件,它在选择地址时触发回调函数。在这个回调函数中,我用地址查找器返回的值更新表单控件对象,例如。

    callback(address:any):void {
        this.line1.setValue(returnedAddress.Line1, { emitEvent: true });
    }
    

    其中,line1是对创建并添加到FormGroup的FormControl的引用。

    当调用此回调时,HTML输入控件将用新地址行1更新,但不会更新整个表单值。

    如果我给HTML输入控件焦点,然后关闭tab,表单值就会更新。

    我假设,因为更新超出了常规的angular线程,所以它缺少了更改,但我无法解决如何通知angular此更改—我尝试的更改检测内容似乎与更新视图有关,而不是表单值。

    1 回复  |  直到 4 年前
        1
  •  1
  •   Dale K    4 年前

    我不能放弃。。。所以我尝试了以下方法,希望它能更新:

    this.ngZone.run(() => {
        this.changeRef.markForCheck();
    });
    

    但后来随机尝试将更新放在角度区域内,结果是:

    this.ngZone.run(() => {
        this.line1.setValue(returnedAddress.Line1, { emitEvent: true });
    });
    

    关键是角度 zone 直到现在我才发现。