在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問(wèn)答/HTML/ vue根組件mounted的時(shí)候異步請(qǐng)求得到全局參數(shù)用于字段翻譯,存入store

vue根組件mounted的時(shí)候異步請(qǐng)求得到全局參數(shù)用于字段翻譯,存入store,子組件刷新有時(shí)取不到數(shù)據(jù)

項(xiàng)目使用vue,一些字段需要翻譯,后臺(tái)給了一個(gè)接口,用于獲取字典。
我在根組件mounted的時(shí)候發(fā)請(qǐng)求,

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;
        }
    }
}

然后在子組件取參數(shù)

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

現(xiàn)在問(wèn)題來(lái)了,如果從其他頁(yè)面進(jìn)入這個(gè)頁(yè)面,getParams()是似乎總是可以取到參數(shù),但是如果在當(dāng)前頁(yè)面刷新,就有可能無(wú)法取到參數(shù),這是dic還是{}。很顯然這是一個(gè)異步的問(wèn)題。

想到一個(gè)比較穩(wěn)妥的解決方案,寫(xiě)一個(gè)action,先判斷state里面的dictionary有沒(méi)有,如果沒(méi)有就去發(fā)個(gè)請(qǐng)求,返回promise,在then里面寫(xiě)之后的邏輯。每次需要翻譯的時(shí)候就去dispatch這個(gè)action。

但是這個(gè)項(xiàng)目幾乎每個(gè)頁(yè)面都需要這個(gè)翻譯的參數(shù),有沒(méi)有辦法只請(qǐng)求一次,不用每次都去使用這個(gè)action?

目前的解決方案是用延時(shí)

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

用了之后好像再?zèng)]遇到過(guò)參數(shù)獲取不到的問(wèn)題了。但是這種做法并不嚴(yán)謹(jǐn)。有沒(méi)有更穩(wěn)妥的做法?

回答