ionic2 打包的app中,rxjs在首页订阅的信息,如何用alert显示在其他页面?

现在做的项目是这样,在首页订阅用户的登录信息,延时触发向服务器的某个请求。

登录页是个modal页,可以在任何需要验证登录的时候调起。首页home页,也就是第一Tab页面,会在初始化的时候订阅用户信息。判断有了用户登陆成功之后,会调用服务器的一个接口,判断是否是新用户;如果是新用户,服务器返回的数据包含true的判断,就会在首页弹出一个新人红包的alert提示。

// home页 初始化 订阅用户信息,一旦登陆,发送请求给服务器
this.accountInfo$ = this.store.select(Selectors.UserAccount.getAccount)
this.accountInfoSubscription = this.accountInfo$.subscribe(data => {
  this.accountInfo = data
  if (this.accountInfo && this.accountInfo.id) {
    setTimeout(() => {
      this.store.dispatch(new Actions.UserAccount.DrawPrizeActivity())
    }, 5000) // 推迟发送,避免和首页弹屏同时出现
  }
})


// 处理新注册红包的结果
this.drawPrizeResultSubscription = this.store.select(Selectors.UserAccount.getDrawPrizeResult).subscribe(res => {
  if (res && res.success) { 
    const prize = res.prize
    const prizeName = prize.name
    const moduleType = res.moduleType
    const msg = '恭喜您获得:' + prizeName
    const buttons: any = [
      {
        text: '知道了', 
        handler: () => { }
      }
    ]
    if (moduleType === 'ACCOUNT') {
      buttons.push({
        text: '去个人中心',
        cssClass: 'special',
        handler: () => {
          this.navCtrl.parent.select(4)
        }
      })
    }

    const alert = this.alertCtrl.create({
      cssClass: 'custom-alert',
      subTitle: '<img src="assets/custom-alert/gaoxing.png" alt="">',
      message: msg,
      buttons: buttons
    })
    alert.present()

  }
})

问题来了,其他页面也有需要用户登录权限,一旦在别的页面比如设置页面调起登录modal页,登陆成功后会留在设置页面。但是首页的订阅以及调用服务器的请求都会执行。而如果是新用户,红包alert会在home页面弹出,不会在当前的设置页面出现。

问题: 是否可以将订阅用户信息和调用服务器接口的处理放在全局来做,在任何页面调起登录页成功后返回之前页面,同时弹出新用户红包alert提示?如果可行,如何做?或者有没有别的方法解决这种操作?

阅读 1.4k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题