Angular CLI:6.0.8
节点:8.11.3
我刚刚通过Angular Material,Angularfire和NgRx学习了Udemy-Angular(完整应用程序)。 在第72课上,聆听价值变化(of_Firestore)我有错误
export class NewTrainingComponent implements OnInit {
exercises: Observable<Exercise[]>;
constructor(
private trainingService: TrainingService,
private db: AngularFirestore) { }
ngOnInit() {
this.exercises = this.db
.collection('availableExercises')
.snapshotChanges()
.pipe(
map(docArray => {
return docArray.map(doc => {
return {
id: doc.payload.doc.id,
name: doc.payload.doc.data().name,
duration: doc.payload.doc.data().duration,
calories: doc.payload.doc.data().calories
};
});
})
).subscribe(result => {
console.log(result);
});
}
onStartTraining(form: NgForm) {
this.trainingService.startExercise(form.value.exercise);
}
}
错误TS2322:无法将“订阅”类型分配给“可观察”类型。
错误TS2339:类型“ {}”上不存在属性“名称”。
错误TS2339:类型“ {}”上不存在属性“持续时间”。
错误TS2339:类型“ {}”上不存在属性“卡路里”。
答案 0 :(得分:3)
错误消息非常明显。 exercises
是您定义的Observable
的类型:
exercises: Observable<Exercise[]>;
但是您可以通过ngOnInit()
方法将其分配给订阅。
您的ngOnInit()
方法应类似于以下内容(请勿分配给exercises
):
ngOnInit() {
this.db
.collection('availableExercises')
.snapshotChanges()
.pipe(
map(docArray => {
return docArray.map(doc => {
return {
id: doc.payload.doc.id,
name: doc.payload.doc.data().name,
duration: doc.payload.doc.data().duration,
calories: doc.payload.doc.data().calories
};
});
})
).subscribe(result => {
console.log(result);
});
}