账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    vue根组件mounted的时候异步请求得到全局参数用于字段翻译,存入store,子组件刷新有时取不到数据
    46
    0

    项目使用vue,一些字段需要翻译,后台给了一个接口,用于获取字典。
    我在根组件mounted的时候发请求,

    new Vue({
        data:{},
        methods:{
            getDic(){
                axios.post(url)
                .then(res=>{
                    this.$store.commit('saveDic',res)
                })
            }
        },
        mounted(){
            this.getDic();
        }
    })
    

    store是这样的:

    const store = {
        state:{
            dictionary:{}
        },
        mutation:{
            saveDic(state,dic){
                state.dictionay = dic;
            }
        }
    }

    然后在子组件取参数

    export default {
      data() {},
      methods:{
        getParams(){
            let dic = this.$state.dictionary
            console.log(dic)
        }
      },
      mounted(){
          this.getParams();
      }
    }
    

    现在问题来了,如果从其他页面进入这个页面,getParams()是似乎总是可以取到参数,但是如果在当前页面刷新,就有可能无法取到参数,这是dic还是{}。很显然这是一个异步的问题。

    想到一个比较稳妥的解决方案,写一个action,先判断state里面的dictionary有没有,如果没有就去发个请求,返回promise,在then里面写之后的逻辑。每次需要翻译的时候就去dispatch这个action。

    但是这个项目几乎每个页面都需要这个翻译的参数,有没有办法只请求一次,不用每次都去使用这个action?

    目前的解决方案是用延时

    mounted(){
        setTimeout(() => {
         this.getParams();
       }, 1000);
      }

    用了之后好像再没遇到过参数获取不到的问题了。但是这种做法并不严谨。有没有更稳妥的做法?

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    更多回答
    网站公告
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部