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

鍍金池/ 問答/HTML/ vue怎么在beforeCreate里獲取data

vue怎么在beforeCreate里獲取data

被問的一個(gè)面試題:vue怎么在beforeCreate里獲取data

回答
編輯回答
我不懂
  1. 異步方式獲取data。this.$nextTick或者setTimeout都行。相當(dāng)于在初始化前告訴容器,等全執(zhí)行完了再跑里面的代碼。這種方式別說拿data了,拿渲染完DOM都OK~
  2. 同步方式的話,是要了解框架內(nèi)部原理的。在beforeCreate前,所有的options都會(huì)先存到vm.$options中,在beforeCreate之后,將$options里的data啦,props啦,methods啦等等一個(gè)個(gè)附到vm上,然后再觸發(fā)created鉤子。所以在beforeCreate的時(shí)候,通過this.message是拿不到值的,在created的時(shí)候就能通過this.message拿到值了。

一定要在beforeCreate的時(shí)候就同步去拿data里的值的話,就是直接從this.$options.data里去拿。如果data中的初始值是簡(jiǎn)單的string,那直接this.$options.data()["message"]就好.涉及到復(fù)雜點(diǎn)的情況,建議看看源碼里是怎么處理的,具體在core/instance/state.js中的initData(vm)里。

但是實(shí)際情況中從來(lái)沒遇到過需要在組件還沒初始化就去拿data的……

2018年1月2日 22:56
編輯回答
哎呦喂

<div id="app"></div>
<script>

var vm = new Vue({
  el: '#app',
  data() {
    return {
      message: "你好呀!"
    }
  },
  beforeCreate() {
    this.$nextTick(function () {
      console.log(this.message);
    })
  }
});

</script>

在 this.$nextTick回調(diào)函數(shù)中獲取

2017年2月11日 01:47
編輯回答
玩控

wangqibiao的方案是可以的

clipboard.png

2018年7月3日 03:29
編輯回答
練命

不能獲取,最早獲取到data的生命周期是created中。

2018年4月9日 21:37
編輯回答
柒喵

如果能保證this.$nextTick方法的執(zhí)行是在created后,那就可以。如果不能保證呢?因?yàn)槟悴恢?code>this.$nextTick里的一堆東西執(zhí)行的確切時(shí)間。

用promise方案更靠譜:

let F = null;
export default {
    //...
    data(){
        return {
            dataList:[]
        }
    },
    beforeCreate() {
        F = fetchData(//fetchData是取數(shù)方法
            //...返回promise
        )
    },
    created() {
        F.then(data=>{
            this.dataList = data
        })
    }
}

這就做到了在beforeCreate里發(fā)請(qǐng)求取數(shù)。

2017年12月2日 06:56