【发布时间】: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