angular - 当数据尚不存在时,如何处理从父组件到子组件的可观察数据

标签 angular

我有一个父级,它通过订阅可观察对象从数据库获取数据。

我的问题是我有一个子组件在其 ngOnInit 方法中使用来自父组件的数据。这会产生错误,因为渲染子组件时数据还不存在。

在下面,我收到错误,因为我从可观察到的“disciplines”尚未返回。但是子级已被渲染,并且 ngOnInit 此时正在访问一个空数组。

如果我用值对规则进行硬编码,而不是等待可观察对象返回数据,则效果很好。

所以问题是,在子组件的 ngOnInit 访问数据之前,如何确保数据在我的变量中。

在父级中,我在 ngOnInit 方法中有这个:

      this.disciplines = [];

      let getOptions = this.service.getOptions().subscribe((data: any) => {
          this.populateOptions(data);
        });
   ...

  populateOptions(data: any): void {
    this.disciplines = data['disciplines'];

  }

在 parent 模板中

   <cmp-child 
      [disciplines]="disciplines" 
    </cmp-child>

在子组件的ngOnInit中,

ngOnInit(): void {
    this.populateOptions()
  }

  populateOptions(): void {
    this.advanced = this.disciplines.filter(d => d.isAdvancedDiscipline === true).map(m => m.id);
    console.log("disciplines: ", this.disciplines);

  }

谢谢

汤姆

最佳答案

仅当 discipline 具有值时,您才可以更改父组件的模板以呈现子组件:

  <cmp-child *ngIf="disciplines"
     [disciplines]="disciplines" 
  </cmp-child>

这样,您的子组件仅在 discipline 有值(value)时才会被实例化和初始化。这也意味着当将 discipline 设置回 null 或未定义时,您的子组件将被销毁。

关于angular - 当数据尚不存在时,如何处理从父组件到子组件的可观察数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70675623/

相关文章:

angular - CORS 策略已阻止访问位于 "http://...."源 'http://localhost:4200' 的 XMLHttpRequest

angular - 在 Angular 组件中使用 typescript getter 或局部变量作为服务变量

javascript - Angular2 输入类型数字,无十进制值

mysql - 类型错误 : Converting circular structure to JSON when getting data from mysql DB

angular - 使用具有两列的 Angular 列表

Angular2 重用路由进行编辑/添加

node.js - 将服务器端代码添加到 angular-cli 项目与 Node 类型冲突

html - Angular 2 - 我可以在 <head> 部分的 <link rel ='stylesheet' 标签中使用 *ngIf 吗?

angular - 非法使用过滤器 typescript

Angular 2+ - 数据加载 : best practices