【问题标题】:how to send large amount of data from parent to child in angular?如何以角度从父母向孩子发送大量数据?
【发布时间】:2021-12-30 14:19:51
【问题描述】:

我有一个通过 API 调用获取对象的父组件。然后我在函数中使用这个对象来获取所需的数据。我也需要这个孩子的确切数据。该数据非常庞大且复杂,因此不知道如何通过@Input() 发送。

目前我通过在子组件中再次重复整个过程来获取数据。 渲染时间太长,也不是很好的做法。

我也尝试通过服务发送数据,但子组件在从服务接收数据之前就被渲染了。 这是代码—— 父组件

selectLanguage(id: number) {
**labelObj is coming via api**
    if (id == 2) {
      this.defaultLanguage = true;
      for (var i = 0; i < this.labelObj.length; i++) {
        if (this.labelObj[i].DefaultLanguage == '"CS+SR" - KPI') {
          this.CSSRKPILabel = this.labelObj[i].DefaultLanguage;
        }

        if (this.labelObj[i].DefaultLanguage == 'Country') {
          this.CountryLabel = this.labelObj[i].DefaultLanguage;
        }
        if (this.labelObj[i].DefaultLanguage == 'Dealer Outlet Code') {
          this.DealerOutletCodeLabel = this.labelObj[i].DefaultLanguage;
        }
        if (this.labelObj[i].DefaultLanguage == 'Switch To') {
          this.SwitchToLabel = this.labelObj[i].ConvertedLanguage;
        }
        if (this.labelObj[i].DefaultLanguage == 'Instant Feedback') {
          this.InstantFeedbackLabel = this.labelObj[i].DefaultLanguage;
        }
        if (this.labelObj[i].DefaultLanguage == 'Survey Feedback') {
          this.SurveyFeedbackLabel = this.labelObj[i].DefaultLanguage;
        }
        if (this.labelObj[i].DefaultLanguage == 'Service Reminders') {
          this.ServiceRemindersLabel = this.labelObj[i].DefaultLanguage;
        }
        if (this.labelObj[i].DefaultLanguage == 'Survey Analysis') {
          this.SurveyAnalysisLabel = this.labelObj[i].DefaultLanguage;
}
 }

基本上,我必须在子组件中发送所有这些标签的值。 TIA。

【问题讨论】:

  • 你真的应该研究一下 switch-case 表达式,那个代码伤害了我的灵魂。此外,您可以使用for(const label of this.labelObj),然后访问label.DefaultLanguage,而不是不断索引。
  • 您可以考虑使用 ngIf 来避免孩子在加载所有数据之前进行渲染。或者在子组件中使用 ngOnChanges
  • 很抱歉,但我保证我正在努力提高我的编码技能。那么,我应该只使用服务发送数据吗?
  • 没问题,我只是有点傻,我相信你很快就会学会一些更好的编码习惯。您可以通过属性发送它(这通常是最好和最简单的方法),但如果您正确执行,也应该可以通过服务发送它。

标签: angular angular8 angular10 angular12


【解决方案1】:

使用属性绑定将包含标签的单个对象发送到子组件。

您的函数应该返回一个对象中的所有标签值:

const returnedObject: ResultObjectType | undefined = undefined;

// Function code here where this.XXXLabel is returnedObject.XXXLabel

return returnedObject;

应该先在父组件中定义属性并在某些代码中像这样初始化:

this.resultObject = selectLanguage(); // Function returns object containing all the labels

父组件模板:

<child-component [property]="resultObject">

子组件 ts:

@Input()
property: ResultObjectType | undefined = undefined;

ResultObjectType 是对象的类型,如果 ResultObject 未绑定在父组件中,则 undefined 是初始化示例。

【讨论】:

  • 谢谢你,但它不是我关心的标签对象,它在函数中重复整个过程,在孩子身上。我也需要孩子中所有标签的值。我如何发送这些?
  • 我编辑了代码。不确定我是否正确理解您的用例。但是,我的建议是创建另一个包含函数返回的所有标签的对象,并将该对象发送到子组件。
  • 如果您需要更多帮助,请给我们提供 Stackbliz 的网址
猜你喜欢
  • 2015-09-14
  • 2017-05-03
  • 1970-01-01
  • 2018-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多