javascript - 来自表达式的 Angular 6 错误调用函数

标签 javascript angular typescript

我目前正在开发 Angular 6 应用程序。我尝试从表达式调用方法。不幸的是,它似乎不再起作用了。

这个例子很简单,看起来像我的car.component.html:

<div>Car Name: {{ getCarName() }} </div>

在我的组件代码 car.component.ts 中,我实现了类似这样的功能:

getCarName() {
  return this.carName;
}

实际上,每次我将鼠标悬停在组件 UI 上的另一个 div 上时,我都会更改属性 carName

不幸的是,我收到以下错误:

ExpressionChangedAfterItHasBeenCheckedError:表达式在检查后已更改。以前的值...

你知道如何解决这个问题吗?

谢谢!!

最佳答案

ExpressionChangedAfterItHasBeenCheckedError 意味着,如果您以这种方式构建逻辑,则必须在组件内部手动检测更改:

import { Component, AfterViewChecked, ChangeDetectorRef } from '@angular/core';

/* Other stuff goes here */

export class PhoneVerifyComponent implements AfterViewChecked {
  constructor(private _changeDetectorRef: ChangeDetectorRef) { }

  ngAfterViewChecked() {
    /* This way the detector will run after every change */
    this._changeDetectorRef.detectChanges();
  }

  getCarName() {
    /* This way you run detector only on this function call */
    this._changeDetectorRef.detectChanges();
    return this.carName;
  }
}

您可以选择任何您喜欢的方式,在特定位置或每次更改后运行检测器。如果您的目标只是使用此方法解决问题,我建议在特定函数调用时运行它,但如果您有很多这样的情况 - 最好在 ngAfterViewChecked 中运行它。

但是

最短的方法是将这个函数执行的结果存储到类属性中,并简单地插入这个属性,而不是方法:

<div>Car Name: {{ carName }}</div>

无论如何,我们不知道您的目标以及您的实际项目中发生了什么,因此您必须根据您的情况选择更合适的方式。

关于javascript - 来自表达式的 Angular 6 错误调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50396309/

相关文章:

javascript - 如何在 Angular 2 中使用数据表

regex - 如何从 Typescript 中的正则表达式 exec 匹配访问组?

encoding - TypeScript 生成的 JS 文件编码

java - 果冻 + JavaScript

javascript - 删除所有图像

angular - Chrome 87.0.4280 (Windows 10.0.0) : Executed 0 of null (skipped 229) ERROR (34. 875 秒/0 秒)

Angular 2 - 从响应中获取 cookie

javascript - 在这种情况下我应该使用 JavaScript 原型(prototype)吗?

javascript - 在 vue.js 中保留 DOM 更新时的滚动位置

angular - Angular 应用程序中的 Firebase 功能不起作用