1. 程式人生 > 實用技巧 >axios的普通函式和箭頭函式下的this的區別

axios的普通函式和箭頭函式下的this的區別

  今天在學習使用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);
                    })
                }
            }
        })

參考博文:

https://www.cnblogs.com/stella1024/p/7598541.html