axios的普通函式和箭頭函式下的this的區別
阿新 • • 發佈:2020-08-17
今天在學習使用axios的時候,想要將響應內容儲存到當前Vue物件中,考慮到將response.data賦值給this.info就可以實現,但是在用的時候卻發現使用箭頭函式能夠正常實現,但是在使用普通函式的時候卻無法實現,兩組程式碼如下:
箭頭函式(能夠正常實現賦值):
var url="armour?aname="+$("#input1").val(); $("#div2").html(url); new Vue({ el:'#div1', data:{ info:'' }, methods:{ getInfo:function () { axios .get(url).then(response=>(this.info=response.data))//箭頭函式 .catch(function (error) { console.log(error); }) } } })
此時在箭頭函式中的this是當前物件,所有使用this.info就能夠將響應內容賦值給當前Vue物件的info。
普通函式(無法正常賦值):
var url="armour?aname="+$("#input1").val(); $("#div2").html(url); new Vue({ el:'#div1', data:{ info:'' }, methods:{ getInfo:function() { axios .get(url).then(function (response) {//普通函式 this.info=response.data; }) .catch(function (error) { console.log(error); }) } } })
普通函式無法實現的原因:
普通函式中的this並不是代表當前的Vue物件(這個this代表哪個物件目前博主也還不清楚),因此使用this.info並不能給當前Vue物件的info賦值。
驗證和解決:
如果一定要使用普通函式給當前Vue物件的data賦值,可以在使用普通函式之前先將this賦值給一個變數,在普通函式內使用此變數對當前Vue物件的data進行賦值,程式碼如下:
var url="armour?aname="+$("#input1").val(); $("#div2").html(url); new Vue({ el:'#div1', data:{ info:'' }, methods:{ getInfo:function () { var _this=this;//將代表當前Vue例項的this賦值給_this axios .get(url).then(function (response) { _this.info=response.data;//將響應內容賦值給_this.info }) .catch(function (error) { console.log(error); }) } } })
參考博文: