在Angular 7中渲染组件之前加载数据

在Angular 7中渲染组件之前加载数据,angular,typescript,angular7,Angular,Typescript,Angular7,在呈现组件之前,我试图恢复服务中的数据,但出现以下错误:TypeError:无法读取未定义的属性“dataEntries” 这是我的代码: ngOnInit() { this.route.params.subscribe((params:Params)=>{ this.ActivityId=params['id'] }) this.activityInstanceIdentifier= { "class":"eu.w4.engine.client.bpmn.w4.runtim

在呈现组件之前,我试图恢复服务中的数据,但出现以下错误:TypeError:无法读取未定义的属性“dataEntries”

这是我的代码:

ngOnInit() {
 this.route.params.subscribe((params:Params)=>{
  this.ActivityId=params['id']
 })
 this.activityInstanceIdentifier= {
  "class":"eu.w4.engine.client.bpmn.w4.runtime.ActivityInstanceIdentifier",
  "id":this.ActivityId
 }
 this.activityInstanceAttachement= {
  "class":"eu.w4.engine.client.bpmn.w4.runtime.ActivityInstanceAttachment",
  "dataEntriesAttached":true
 }
this.activityService.getActivityInstance(this.sessionService.getPrincipal(),
                                         this.activityInstanceIdentifier,
                                         this.activityInstanceAttachement)
                                        .subscribe((ActivityInstance)=>{
                                          this.dataInstance=ActivityInstance                                 
                                        });
 }

forms = [
 {
  dataEditionMode:DataEditionMode.DISPLAY,
  name:"demande",
  editedInstance:this.dataInstance["dataEntries"]["demande"]["value"],
  component:DemandeFormComponent,
  multiple:false
 }
]
我也尝试过使用“resolve”,但它不起作用,有什么帮助吗

JS是异步的。这意味着它不会等待任何I/O请求发出 完成并将继续执行下一行代码

在您的例子中,
getActivityInstance
方法是异步的,因此JS不会等待它完成,它将执行下一行。因此

editedInstance:this.dataInstance[“dataEntries”][“demande”][“value”]
在服务返回数据之前执行(此时
dataInstance
未定义
,如果您尚未初始化它)

按如下方式修改代码:

this.activityService.getActivityInstance(this.sessionService.getPrincipal(),
                                         this.activityInstanceIdentifier,
                                         this.activityInstanceAttachement)
                                        .subscribe((ActivityInstance)=>{
                                          this.dataInstance=ActivityInstance;

 forms = [
 {
  dataEditionMode:DataEditionMode.DISPLAY,
  name:"demande",
  editedInstance:this.dataInstance["dataEntries"]["demande"]["value"],
  component:DemandeFormComponent,
  multiple:false
 }
]
  });

异步问题:您应该在订阅回调中移动表单定义。如果您需要在加载组件之前从服务中检索数据,则可以使用,它会在呈现组件之前从服务中加载数据