17.结合Vue+axios

在vue实例方法当中可以透过this访问data里面的数据,但获取网路数据后,vue实例里面的this不在是同样的那个因此无法访问data中的数据,所以我们应该要将this保存起来

<body>        <div id="app">            <input type="button" value="点我获取" @click="getJoke">            <p> {{ joke }}</p>        </div>        <script src="https://unpkg.com/axios/dist/axios.min.js"></script>        <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>        <script>            var app=new Vue({                el:"#app",                data:{                    joke:"想听笑话吗"                },                methods:{                    getJoke(){                        axios.get('https://autumnfish.cn/api/joke')                        .then(function(response){                            console.log(response)                        },function(err){                            console.log(err)                        })                    }                }            })        </script>

我们可以先看到点击Vue应用中的"点我获取"按钮时,这个应用将使用Axios发送一个HTTP GET请求到"https://autumnfish.cn/api/joke" 这个地址(由黑马程序员提供),以获取一条笑话。
http://img2.58codes.com/2024/20163468DuhT7aMTLm.png
但如果要访问笑话的数据是放在data里面的,所以我们可以改成response.data
http://img2.58codes.com/2024/201634686VKntkKuFu.png
接着我们要将笑话呈现出来
但要注意的是,若我们是这样写,this会改变我们就不能就无法拿到数据

methods: {    getJoke: function() {        console.log(this.joke); // 此处的 this 是 Vue 实例      axios.get("https://autumnfish.cn/api/joke").then(function(response) {            console.log(response.data);            console.log(this.joke); // 此处的 this 已经不是 Vue 实例了        }, function(err) { });    }}

在Vue的方法中,this会自动绑定到Vue实例本身,使我们可以在方法中访问Vue实例的数据和方法。但在JavaScript的函数中,this的上下文可能会因为函数的调用方式而改变。所以在axios.get的then函数内部使用了一个匿名函数。而这个匿名函数中的this已经不再指向Vue实例,而是指向了匿名函数本身。因此,this.joke不再指向Vue实例的joke数据,而是未定义。
所以我们应该修改为

methods: {    getJoke: function() {        var that = this; // 将外层的 this 保存在变量中        console.log(this.joke);        axios.get("https://autumnfish.cn/api/joke").then(function(response) {            console.log(response.data);            that.joke = response.data; //储存joke            console.log(that.joke); // 使用保存的 that 来访问 Vue 实例的数据        }, function(err) { });    }}

所以我们要存起来var that = this,通过这种方式,就可以在访问到Vue实例的数据。
另一个方法是使用箭头函数,因为箭头函数的this与外层上下文相同,不会随着函数的调用而改变:

methods: {    getJoke: function() {        console.log(this.joke);        axios.get("https://autumnfish.cn/api/joke").then(response => {            console.log(response.data);            console.log(this.joke); // 此处的 this 仍然指向 Vue 实例this.joke=response.data;//更新笑话        }, err => { });    }

http://img2.58codes.com/2024/20163468GV1ymi5SS0.png
这样就可以获取笑话了。
参考资料:
https://www.bilibili.com/video/BV1HE411e7vY/?p=26&share_source=copy_web&vd_source=85a8c5bb37dc77d30860d2b3537de967


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章