vue?中使用?this?更新數(shù)據(jù)的一次問題記錄
情景說明:
之前用 vue 做數(shù)據(jù)綁定更新時,發(fā)現(xiàn)一個莫名奇妙的問題。
我在 vue 實例中聲明了一個數(shù)組屬性如 books: [],在異步請求的回調函數(shù)中使用 this.books = res.data.data; 進行數(shù)據(jù)更新,更新步驟后面緊跟著打印了 console.log(this.books),打印數(shù)據(jù)顯示確實更新成功!但頁面數(shù)據(jù)渲染無論是 {{books.length}} 還是 {{books}} 都顯示沒有數(shù)據(jù)?。?!
這就腦瓜子疼了,花了老長時間反復證明了:this.books 數(shù)據(jù)肯定更新上去了,但它喵的 {{books}} 就是不顯示!
敲重點:我是在 axios 的回調函數(shù)中使用的 this 更新數(shù)據(jù)!
最后想起了一個小細節(jié),axios 異步通信的回調函數(shù)我用的是函數(shù)表達式 axios({xxx}).then(function(res){xxx}),格式示例如下:
axios({
url: url,
method: "get",
headers: {
token: token
}, //自定義請求頭數(shù)據(jù)傳遞token
params: {
userId: userId
}
}).then(function(res) {
//上面的回調函數(shù)用的標準格式
}
}); 使用這種格式的回調函數(shù)寫法,如果在回調函數(shù)中,使用 this,那么,這個 this 就不是 vm(ViewModel) 對象了,而是回調函數(shù)自身這個對象?。?!
所以,使用這種回調函數(shù)寫法,在回調函數(shù)中,就不能使用類似 this.books 進行數(shù)據(jù)更新!只能使用 vm.books(vm 指的是創(chuàng)建 vue 實例對象時的引用或對象屬性名稱)來進行對 vue 對象數(shù)據(jù)的更新。
如果想使用 this 來實現(xiàn)數(shù)據(jù)更新,那就必須使用回調函數(shù)的簡寫格式:axios({xxx}).then((res)=>{xxx}),格式示例如下:
axios({
url: url,
method: "get",
headers: {
token: token
}, //自定義請求頭數(shù)據(jù)傳遞token
params: {
userId: userId
}
}).then((res)=>{
//上面的回調函數(shù)用的簡寫格式
}
}); 使用這種簡寫格式的回調函數(shù)寫法,就可以直接在回調函數(shù)中使用 this,此時,這個 this 也是 vm(ViewModel) 對象?。?!
PS:好吧,這細節(jié)也是沒誰了,也怪我自己突然沒注意到,使用了標準格式的回調函數(shù)寫法~
但是,話說 ,為什么它喵的,使用標準格式寫法,this 指的不是 vue 實例對象,但是用它更新的數(shù)據(jù)如 this.books 也給更新上去了,打印出來也真的是一點毛病沒有???
到此這篇關于vue 中使用 this 更新數(shù)據(jù)的一次大坑的文章就介紹到這了,更多相關vue 使用 this 更新數(shù)據(jù)內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
組件中多個el-upload存在導致上傳圖片失效的問題及解決
這篇文章主要介紹了組件中多個el-upload存在導致上傳圖片失效的問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-03-03
基于腳手架創(chuàng)建Vue項目實現(xiàn)步驟詳解
這篇文章主要介紹了基于腳手架創(chuàng)建Vue項目實現(xiàn)步驟詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-08-08
Vue使用Axios庫請求數(shù)據(jù)時跨域問題的解決方法詳解
在 VUE 項目開發(fā)時,遇到個問題,正常設置使用 Axios 庫請求數(shù)據(jù)時,報錯提示跨域問題,那在生產壞境下,該去怎么解決呢?下面小編就來和大家詳細講講2024-01-01

