【问题标题】:Force computed variable to update (Firebase VueJS)强制计算变量更新(Firebase VueJS)
【发布时间】:2020-09-02 18:09:35
【问题描述】:

我有一个导航链接,当我通过 firebase auth 将用户登录到应用程序时,我想更新它。

我通过created hook()中的.onAuthStateChanged管理用户登录变更

 data () {
    return {
      user: null,
      additionaluserinfo: null,
      isAdmin: false
    }
  },
 created () {
    firebase.auth().onAuthStateChanged((user) => {
      if (user) {
        this.user = user
        // call for additional user information from firebase
        db.collection('users').where('user_id', '==', user.uid)
          .get()
          .then((querySnapshot) => {
            querySnapshot.forEach((doc) => {
              console.log(doc.data())
              this.additionaluserinfo = doc.data()
              this.$store.dispatch('setAdditionalUserInfo', doc.data())
            })
          })
          .catch((error) => {
            console.log('Error getting documents: ', error)
          })

        this.additionaluserinfo = this.$store.state.additionaluserinfo
        if (this.$store.state.additionaluserinfo.role === 'admin' || this.$store.state.additionaluserinfo.role === 'superadmin') {
          this.isAdmin = true
        }
        if (this.$store.state.additionaluserinfo.role === 'superadmin') {
          this.isSuperAdmin = true
        }
      } else {
        this.user = null
        this.additionalUserInfo = null
      }
    })

我正在检查用户是否对 onAuthSateChanged 具有用户权限。

我遇到的问题是我必须刷新页面才能更新我的导航栏(它显示一个基于 v-if="isAdmin" / "isSuperAdmin" 的 div。有没有办法强制这样做从 onAuthStateChanged 内部更新?

【问题讨论】:

    标签: javascript firebase vue.js


    【解决方案1】:

    移动方块

    this.additionaluserinfo = this.$store.state.additionaluserinfo
    if (this.$store.state.additionaluserinfo.role === 'admin' || this.$store.state.additionaluserinfo.role === 'superadmin') {
      this.isAdmin = true
    }
    if (this.$store.state.additionaluserinfo.role === 'superadmin') {
      this.isSuperAdmin = true
    }
    

    this.$store.dispatch('setAdditionalUserInfo', doc.data()).then(() => { /* */ }) 内,否则将在将数据分派到存储区之前评估该代码(数据获取是异步的)

    或者,最好将其删除,然后添加:

    computed: {
        role: () => this.$store.state.additionaluserinfo ? this.$store.state.additionaluserinfo.role : '',
        isAdmin: () => this.role === 'admin' || this.role === 'superadmin', // remove isAdmin from data()
        isSuperAdmin: () => this.role === 'superadmin',
    }
    

    【讨论】:

    • 谢谢,第一个选项效果很好,第二个计算属性失败,因为我无法读取 null 的值
    • 嗯,问题出在其他地方。如果 additionaluserinfo 为 null,则角色的值为 '',它按预期工作。
    猜你喜欢
    • 1970-01-01
    • 2019-03-24
    • 1970-01-01
    • 2020-03-14
    • 1970-01-01
    • 2018-11-09
    • 2014-06-17
    • 2017-12-20
    • 2020-02-24
    相关资源
    最近更新 更多