Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular @输入变量在HTTP请求时被填充_Angular_Typescript_Asynchronous_Observable - Fatal编程技术网

Angular @输入变量在HTTP请求时被填充

Angular @输入变量在HTTP请求时被填充,angular,typescript,asynchronous,observable,Angular,Typescript,Asynchronous,Observable,在我的app.component.ts中,我从返回HTTP请求结果的服务调用函数: questions: QuestionBase<any>[]; constructor(service: QuestionService) { this.questions = service.getQuestions().subscribe(val => console.log(val)); //gets logged after the other console log below

在我的
app.component.ts
中,我从返回HTTP请求结果的服务调用函数:

questions: QuestionBase<any>[];
constructor(service: QuestionService) {
    this.questions = service.getQuestions().subscribe(val => console.log(val)); //gets logged after the other console log below
}

我现在的问题是,当HTTP请求尚未完成时,
ngOnInit
中的
toFormGroup
函数调用得太早。我不习惯观察。在
getQuestions
中的HTTP请求完成后,如何调用该函数。我已经尝试了
ngOnChanges
,但它甚至在
ngOnInit

您可以在ngOnChanges中调用toFormGroup之前就被调用了。而且,如果需要,只在问题得到第一个值时调用toFormGroup。我现在在手机上,因此无法提供代码示例

您可以在ngOnChanges中调用toFormGroup。而且,如果需要,只在问题得到第一个值时调用toFormGroup。我现在在手机上,因此无法提供代码示例

在对问题执行任何操作之前,您可以通过检查
ngOnChanges
中的问题是否有值来设置条件:

ngOnChanges() {
  if(questions && questions.length) {
     this.form = this.qcs.toFormGroup(this.questions);
  }
}

在对问题执行任何操作之前,如果问题有值,可以通过检查
ngOnChanges
来设置条件:

ngOnChanges() {
  if(questions && questions.length) {
     this.form = this.qcs.toFormGroup(this.questions);
  }
}

首先,您需要为subscribe()调用中的问题赋值:

此外,在子组件中,可以实现
ngOnChanges()
,并在值仍然为null时跳过对
@Input()
属性的第一次绑定。
SimpleChange
类具有布尔属性
firstChange

  ngOnChanges(changes: {[key: string]: SimpleChange}) {
    if (!changes.questions.firstChange){
         this.form = this.qcs.toFormGroup(this.questions);}

  }

首先,您需要为subscribe()调用中的问题赋值:

此外,在子组件中,可以实现
ngOnChanges()
,并在值仍然为null时跳过对
@Input()
属性的第一次绑定。
SimpleChange
类具有布尔属性
firstChange

  ngOnChanges(changes: {[key: string]: SimpleChange}) {
    if (!changes.questions.firstChange){
         this.form = this.qcs.toFormGroup(this.questions);}

  }

我已经尝试调用了
ngOnChange
而不是
ngOnInit
,但仍在此行之前调用它:
this.questions=service.getQuestions().subscribe(val=>console.log(val))已记录,因此
questions
数组为空,我收到错误。您可以检测它是否是第一次更改,或者该数组在ngOnChange中不为空。我已尝试调用
ngOnChange
而不是
ngOnInit
,但仍在此行之前调用:
this.questions=service.getQuestions().subscribe(val=>console.log(val));
被记录,因此
questions
数组是空的,并且我得到了错误。您可以检测它是否是第一次更改,或者在ngOnChangesI中数组不是空的get errors:','预期,找不到名称'key',属性'questions'在类型'[any,string]上不存在'注意,如果组件在其他地方使用,最好检查是否定义了
questions
,而不是检查第一次更改,而不异步填充
questions
。这加上@n00dl3是我在我的I get errors中建议的:','预期,找不到名称'key',属性'questions'没有类型“[任何,字符串]上不存在请注意,如果组件在其他地方使用,那么最好检查
问题
是否已定义,而不是检查第一次更改,而不是异步填充
问题
。这加上@n00dl3是我在@n00dl3中建议的内容哈哈,谢谢!:D她还有一个妹妹,她也很可爱交叉眼睛和几乎完全失明:P也许你看到了这张照片,是我最后一张个人资料照片。我想她需要休息一下,不再代表我:D@n00dl3哈哈,谢谢!:D她还有一个妹妹,她也很可爱,交叉眼睛和几乎完全失明:P也许你看到了这张照片,是我最后一张个人资料照片。我想她需要休息一下I’我代表我:D