【发布时间】:2019-03-11 04:30:53
【问题描述】:
我是 Angular 7 的初学者。
当我在调试中使用 getKeys()、构造函数和 ngOnInit 中的断点启动应用程序时,我可以看到首先调用了 getKeys()。在我看来,组件是在调用构造函数或 ngOnInit 之前呈现的。 为什么会这样,我该怎么办? 这对我来说是个问题,因为在 ngOnInit 中我初始化了我在 getKeys 中使用的 Map。
我的 task-list.component.html 的摘录
<div class="task-group" *ngFor="let key of getKeys()">
<h1><span class="key badge badge-secondary">{{ key.displayValue }}
<span class="badge badge-light">{{ getTasksByKey(key).length }}</span></span></h1>
<task *ngFor="let task of getTasksByKey(key)" [task]="task"></task>
</div>
我的 task-list.component.ts 的摘录
...
@Component({
selector: 'task-list',
templateUrl: './task-list.component.html',
styleUrls: ['./task-list.component.scss']
})
export class TaskListComponent implements OnInit {
@Input() tasks: Task[];
private mapExtractorByView: Map<TaskListViewEnum, KeyExtractor<Task>>;
private _viewMode: TaskListViewEnum;
constructor() {
this.viewMode = TaskListViewEnum.byDate;
}
ngOnInit() {
this.mapExtractorByView = new Map<TaskListViewEnum, KeyExtractor<Task>>();
this.mapExtractorByView.set(TaskListViewEnum.byDate, (t: Task) => new Key(t.date, formatDate(t.date, "fullDate", "fr")));
this.mapExtractorByView.set(TaskListViewEnum.byTag, (t: Task) => new Key(t.tags, t.tags));
}
getKeys() {
return CollectionUtils.extractKeys(this.tasks, this.mapExtractorByView.get(this._viewMode));
}
getTasksByKey(key: Key) {
return CollectionUtils.getElementsByKey(this.tasks, this.mapExtractorByView.get(this._viewMode), key);
}
@Input()
set viewMode(viewMode: TaskListViewEnum) {
this._viewMode = viewMode;
}
}
【问题讨论】:
-
尝试console.log(this);在每个方法(getKeys、构造函数和 ngOnInit)中并比较它们,您是否每次都看到相同的对象?您也可以创建一个临时属性并使用随机数初始化它,例如:dummy = Math.random();
标签: angular