页面激活服务后Angular 5执行功能

时间:2018-06-20 09:00:18

标签: angular firebase angular5 angular-services

我的Angular项目中有多个服务和页面。

Pages:
1) Login
2) Dashboard
3) Order List

Services:
1) UserService
2) OrderService

访问OrderListPage的正确过程是:

1)登录-userServices已初始化

2)系统将用户重定向到仪表板-OrderService在调用内部函数之前已初始化

3)用户转到订单列表-OrderService中的功能已准备好为OrderList > ngOnInit()执行功能

我有一个问题,如果用户直接进入http://localhost:4200/orderList页面而不经过处理1和2,则OrderService尚未初始化,因此在{{1 }}从ngOnInit()开始,它将出现错误OrderListPage

我的"Cannot read property 'child' of undefined"

order.service.ts

我的currentUser iwoRef constructor() { firebase.auth().onAuthStateChanged(user => { if (user) { this.currentUser = user; this.iwoRef = firebase.database().ref(`/iwo`); console.log('order services loaded') } else{ return false } }); } getIwo(iwo){ return this.iwoRef.child('stock') }

order-list.component.ts

我的错误序列在Chrome控制台中显示:

constructor(private orderService: OrderService) {  }

ngOnInit() {
  this.orderService.getIwo().on('value',snap>{
    console.log(snap.val())
  })
}

如果用户执行流程1、2、3,则不会出现上述问题,我怀疑是因为orderService已在DashboardPage中完全初始化。

我确实尝试过在订单列表页面中使用其他Angular Life Cycle函数来执行> Cannot read property 'child' of undefined --order.service.ts > order services loaded --order.service.ts ,但是它没有按预期工作:

ngDoCheck,ngAfterContentInit,ngAfterContentChecked,ngAfterViewInit,ngAfterViewChecked

请告知。

谢谢!

1 个答案:

答案 0 :(得分:0)

您需要初始化iwoRef

this.iwoRef = firebase.database().ref(`/iwo`);

更改身份验证?

如果没有,则将其移到

之外
onAuthStateChanged

它将在不更改身份验证的情况下进行初始化。