javascript - 角度组件中的@Input() 属性返回空数组
问题描述
我有带有 data 属性的日历组件装饰为@Input():
import { Component, OnInit, Input, OnChanges, SimpleChanges } from '@angular/core';
@Component({
selector: 'app-calendar',
templateUrl: './calendar.component.html',
styleUrls: ['./calendar.component.css']
})
export class CalendarComponent implements OnInit, OnChanges {
@Input() data: CalendarDay[];
constructor() {
this.data = [];
}
ngOnInit() {
this.initDays();
}
ngOnChanges(changes: SimpleChanges) {
console.log(this.data);
console.log(changes.data);
}
}
我像这样从另一个组件传入数据:
<app-calendar [data]="this.calendarData"></app-calendar>
并在日历组件中呈现传递的数据*ngFor
(它呈现完美,一切正常):
<div *ngFor="let item of data">{{item.date}}</div>
我想先解析这些数据,然后再将其呈现到视图中,每当我尝试在日历组件中使用 console.log 数据属性时,我得到一个奇怪的数组,它显示为空,我可以从浏览器控制台“打开”它:
.
当我尝试像这样记录值时:
console.log(this.data[0])
或者
console.log(changes.data.currentValue[0])
我得到了undefined
价值。
解决方案
从构造函数中删除this.data = []
,避免在使用依赖注入时更改任何内容。
并且对于您要在模板中使用的每个内容,使用set
和,这是最佳实践。get
Input()
private _data: CalendarDay[];
@Input() set data(data: CalendarDay[]) {
if(data) {
this._data = data;
}
}
get data(): CalendarDay[] {
return this._data;
}
在您的 HTML 中,您应该通过以下方式传递它:
<app-calendar [data]="calendarData"></app-calendar>
在日历组件中,您可以使用
<div *ngFor="let item of data">{{item.date}}</div>
推荐阅读
- r - 如何在 which() 函数中只返回想要的向量
- mongodb - Mongo转储并恢复到不同的集群,我无法登录
- database - 用于大型临时数据的 GCP 存储
- python - 如何在odoo 10中存储和检索时区敏感日期
- c# - 如何读取另一个进程正在写入的文件
- c# - 在 RestSharp 中传递对象
- spring - ConstraintValidator (jpa) 和 Validator (Spring) 有什么区别?
- java - Mongodb java驱动如何在投影中使用过滤器
- python-3.x - 在多个消费者之间共享一个动态启动的工作者
- wpf - 切换按钮 - 单击时更改图标