鍍金池/ 問(wèn)答/數(shù)據(jù)庫(kù)  HTML/ 為什么用nextTick還是無(wú)效?

為什么用nextTick還是無(wú)效?

遇到了一個(gè)用nextTick的問(wèn)題。。。
里面的大概邏輯是init()方法是從后端拿數(shù)據(jù)然后存入this.addressList,這個(gè)數(shù)據(jù)改變會(huì)導(dǎo)致dom的改變,但是根據(jù)響應(yīng)式原理,dom不會(huì)立即改變,是一個(gè)異步過(guò)程,于是我這里用nextTick方法等待dom改變之后再?gòu)闹腥ト〉侥骋豁?xiàng)默認(rèn)地址,可是這樣還是取不到,表現(xiàn)是selectedId還是空字符串?請(qǐng)問(wèn)一下是我理解錯(cuò)了nextTick的用途嗎?

mounted(){
            this.init();
            //無(wú)效??
             this.$nextTick(function () {
                 this.addressList.forEach((item)=>{
                            if(item.isDefault){
                                this.selectedId=item.addressId;
                            }
                    })
            })
        },
        methods:{
            init(){
                axios.get('/users/addressList').then((response)=>{
                    var res=response.data;
                    if(res.status==='0'){
                        this.addressList=res.result;
                        //只有在里面改才有用
                        //     this.addressList.forEach((item)=>{
                    //         if(item.isDefault){
                    //             this.selectedId=item.addressId;
                    //         }
                    // })
                    }
                })
            },
回答
編輯回答
風(fēng)清揚(yáng)

不知這么寫(xiě)能否讓你理解一下nextTick的用途:

mounted(){
    this.init();
},
methods:{
    init(){
        axios.get('/users/addressList').then((response)=>{
            var res=response.data;
            if(res.status==='0'){
                this.addressList=res.result;
                this.addressList.forEach((item)=>{
                  if(item.isDefault){
                      this.selectedId=item.addressId;
                   }
                });
                this.$nextTick(function() {
                     //在這里執(zhí)行的代碼表示從服務(wù)器返回的數(shù)據(jù)已經(jīng)賦值到data中,并且已經(jīng)更新了相應(yīng)頁(yè)面中綁定的值,這時(shí)候就可以使用這個(gè)方法來(lái)執(zhí)行其它函數(shù)或者功能
                })
            }
        })
    }
2017年6月4日 21:24
編輯回答
情未了

代碼按照書(shū)寫(xiě)順序運(yùn)行,你直接寫(xiě)到 init后面,直接就調(diào)用了啊,你的異步數(shù)據(jù)獲取請(qǐng)求還沒(méi)回來(lái)。

這dom生效意思是,你確定 更改了數(shù)據(jù),在vue的聲明周期中,提供了nextTick方法供dom更改回調(diào)使用的。

2017年10月29日 06:50