我有一个简单的场景,但就是不能让它工作!

在我看来,我在一个高度有限的框中显示一些文本.

文本正在从服务器获取,因此当文本进入时视图会更新.

现在我有一个"展开"按钮,它有一个ngIf,如果框中的文本溢出,它会显示按钮.

问题是,由于文本在获取时会发生变化,"展开"按钮的条件在Angular的变化检测完成后变为true...

所以我得到这个错误:Expression has changed after it was checked. Previous value: 'false'. Current value: 'true'.

显然,按钮没有显示...

see this 100(判断控制台以查看错误…)

你知道怎么做吗?

推荐答案

发生此错误的原因是您在dev mode中:

In dev mode change detection在每次常规的change detection运行后增加一个回合,以判断模型是否已更改.

因此,为了强制更改检测运行下一个滴答声,我们可以这样做:

export class App implements AfterViewChecked {

  show = false; // add one more property

  constructor(private cdRef : ChangeDetectorRef) { // add ChangeDetectorRef
    //...
  }
  //...
  ngAfterViewChecked() {
    let show = this.isShowExpand();
    if (show != this.show) { // check if it change, tell CD update view
      this.show = show;
      this.cdRef.detectChanges();
    }
  }

  isShowExpand()
  {
    //...
  }
}

现场演示:https://plnkr.co/edit/UDMNhnGt3Slg8g5yeSNO?p=preview

Angular相关问答推荐

使Angular 效果只执行一次

元件不工作时的Angular 17属性 Select 器

ANGLE DI useFactory将参数传递给工厂函数

在Angular 为17的独立零部件中使用@NGX-平移

基于RxJS的Angular 服务数据缓存

在以下位置升级到Angular 16 Break Sharepoint广告:This._history.replaceState不是函数

使用 Angular 类构造函数来获取依赖项

Angular 15 在 URL 中使用@进行路由

Angular 信号 在 effect() 中使用 debounce

从具有特定 node 值的现有数组创建新数组

显示 1 个数据而不是所有 ngFor - Angular 11

错误:在工作区外运行 Angular CLI 时,此命令不可用

如何 use/import http模块?

material Angular手风琴header/title高度

如何在Angular 4中为数字管道指定语言环境千位分隔符

Angular 2 中的 $implicit 是什么?

Angular 2:formGroup 需要一个 FormGroup 实例

Angular 应用程序必须在新部署后清除缓存

declarations和entryComponents组件有什么区别

来自 chokidar (C:\) 的错误:错误:EBUSY:资源繁忙或锁定,lstat 'C:\DumpStack.log.tmp