Angular 在何处初始化角度4分量中的变量-表达式ChangedTerithasBeenCheckedError
我有一个带布尔变量的角4分量。初始值取决于输入流 TypeScript要求我声明变量,如下例所示。如果没有它,此.isLoading将触发错误 在这一点上,我还不知道它的值,所以我只声明它,而不指定变量Angular 在何处初始化角度4分量中的变量-表达式ChangedTerithasBeenCheckedError,angular,typescript,rxjs,Angular,Typescript,Rxjs,我有一个带布尔变量的角4分量。初始值取决于输入流 TypeScript要求我声明变量,如下例所示。如果没有它,此.isLoading将触发错误 在这一点上,我还不知道它的值,所以我只声明它,而不指定变量 export class SomeComponent implements OnInit { @Input() someStream$; isLoading: boolean; ngOnInit() { someStream.subscribe((someData) =&g
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。但随后“ExpressionChangedTerithasBeenCheckedError”开始出现
设置这些“默认”值的“正确方法”是什么。我假设isLoading是您知道请求是否完成的标志。 在这个场景中,我所做的是将加载初始化为false:
export class SomeComponent implements OnInit {
@Input() someStream$;
// Initialized as false.
isLoading: boolean = false;
...
}
如果isLoading标志有更多的逻辑,我会改变与组件交互的方式,将@Input()直接更改为someData,并在其父级中处理异步逻辑
希望有帮助。尝试ngOnChages()生命周期而不是ngOnInit(),它可能会解决您的问题。下一步在什么时候、什么地方调用someStream?@MohamedGara在同一个onInit块中是一些检查URL参数的逻辑。如果所有必需的参数都在那里,它将启动http调用并设置isLoading。我已经尝试过这个方法,但当isLoading在ngOnInit中的“同一刻度”内计算为true时,它不起作用。我得到的是表达式ChangedTerithasBeenCheckedError。我担心将变量向上移动到父级只会将问题移动到另一个组件。有点奇怪,因为我有与您完全相同的代码,并且不会引发任何错误。可以肯定的是,您的订阅是否只触发一次?可能在同一个周期中,可观察到的对象正在发送新的值。