何处初始化Angular 4组件中的变量 - ExpressionChangedAfterItHasBeenCheckedError

时间:2017-10-20 15:13:30

标签: angular typescript rxjs

我有一个带有布尔变量的Angular 4组件。初始值取决于输入流。

TypeScript要求我声明变量,如下例所示。如果没有它,this.isLoading将触发错误。

此时我还不知道它的值,所以我只是声明它而不指定变量。

export class SomeComponent implements OnInit {
  @Input() someStream$;
  isLoading: boolean;

  ngOnInit() {
    someStream.subscribe((someData) => {
      // Code to determine the value for isLoading
      this.isLoading = true; 
    });
  }
}

稍后当我知道值时,我会将其设置为true或false。但随后“ExpressionChangedAfterItHasBeenCheckedError”开始了。

设置这些“默认”值的“正确方法”是什么。

1 个答案:

答案 0 :(得分:0)

我假设isLoading是你的标志,知道请求是否完成。 我在这种情况下所做的是将加载初始化为false:

export class SomeComponent implements OnInit {
  @Input() someStream$;
  // Initialized as false.
  isLoading: boolean = false;

  ...
}

如果isLoading标志有更多逻辑,我会改变你与组件交互的方式,直接将@Input()更改为someData,并处理它的父节点中的异步逻辑。

希望它有所帮助。