如何在 ngOnInit 之后在页面加载时更新 属性
How do I update a property on page load after ngOnInit
我有一个 Ionic 4 应用程序,它从 firebase ngOnInit 中提取列表到页面 A。当我离开页面 A 并在不同的页面 B 上更新列表时,然后当我导航回页面 A 时列表没有更新。我必须关闭应用程序然后重新打开它才能获取更新的列表。我已经尝试了几种不同的生命周期 Angular 挂钩无济于事。
简单页面加载初始化后是否有生命周期?每当我导航回该页面时如何检查更新的列表?
ngOnInit() {
this.dataSvc.getItineraries()
.get()
.then( itineraryListSnapshot => {
this.matchItinerary = [];
itineraryListSnapshot.forEach(snap => {
this.matchItinerary.push({
id: snap.id,
activities: snap.data().activities,
destination: snap.data().destination,
startDate: snap.data().startDate,
endDate: snap.data().endDate,
tripDetails: snap.data().tripDetails,
userId: snap.data().userId
});
});
});
}
是的,我实际上是从未被破坏的服务中加载数据。
这里是实际服务
getItineraries(): firebase.firestore.CollectionReference {
return this.itineraryCollection;
}
该集合是在服务的构造函数中创建的,只是 returns 所有用户的列表。
.get()
returns 一个 Promise 并且因为 Ionic 缓存页面(如果你使用 Ionics router-outlet
我假设你这样做,因为如果你不这样做,组件将在之后被销毁你离开它,OnInit
会在你访问它之后再次被调用)。因此,当您再次访问组件时,不会调用 OnInit
。幸运的是 Firestore 给出 onSnapshot()
观察你的 collection:
的变化
ngOnInit() {
this.dataSvc.getItineraries()
.onSnapshot( (itineraryListSnapshot: QuerySnapshot) => {
this.matchItinerary = [];
itineraryListSnapshot.forEach(snap => {
this.matchItinerary.push({
id: snap.id,
activities: snap.data().activities,
destination: snap.data().destination,
startDate: snap.data().startDate,
endDate: snap.data().endDate,
tripDetails: snap.data().tripDetails,
userId: snap.data().userId
});
});
});
您还可以提供error
回调。 Read more here
p.s。你可能想使用 docChanges,但你可能不需要使用 onSnapshot()
方法。
我有一个 Ionic 4 应用程序,它从 firebase ngOnInit 中提取列表到页面 A。当我离开页面 A 并在不同的页面 B 上更新列表时,然后当我导航回页面 A 时列表没有更新。我必须关闭应用程序然后重新打开它才能获取更新的列表。我已经尝试了几种不同的生命周期 Angular 挂钩无济于事。
简单页面加载初始化后是否有生命周期?每当我导航回该页面时如何检查更新的列表?
ngOnInit() {
this.dataSvc.getItineraries()
.get()
.then( itineraryListSnapshot => {
this.matchItinerary = [];
itineraryListSnapshot.forEach(snap => {
this.matchItinerary.push({
id: snap.id,
activities: snap.data().activities,
destination: snap.data().destination,
startDate: snap.data().startDate,
endDate: snap.data().endDate,
tripDetails: snap.data().tripDetails,
userId: snap.data().userId
});
});
});
}
是的,我实际上是从未被破坏的服务中加载数据。
这里是实际服务
getItineraries(): firebase.firestore.CollectionReference {
return this.itineraryCollection;
}
该集合是在服务的构造函数中创建的,只是 returns 所有用户的列表。
.get()
returns 一个 Promise 并且因为 Ionic 缓存页面(如果你使用 Ionics router-outlet
我假设你这样做,因为如果你不这样做,组件将在之后被销毁你离开它,OnInit
会在你访问它之后再次被调用)。因此,当您再次访问组件时,不会调用 OnInit
。幸运的是 Firestore 给出 onSnapshot()
观察你的 collection:
ngOnInit() {
this.dataSvc.getItineraries()
.onSnapshot( (itineraryListSnapshot: QuerySnapshot) => {
this.matchItinerary = [];
itineraryListSnapshot.forEach(snap => {
this.matchItinerary.push({
id: snap.id,
activities: snap.data().activities,
destination: snap.data().destination,
startDate: snap.data().startDate,
endDate: snap.data().endDate,
tripDetails: snap.data().tripDetails,
userId: snap.data().userId
});
});
});
您还可以提供error
回调。 Read more here
p.s。你可能想使用 docChanges,但你可能不需要使用 onSnapshot()
方法。