<script>
import axios from 'axios';
axios.defaults.baseURL='http://........'//正确的地址
export default {
methods:{
getBook(){
axios({
method:"GET",
url:'/api/getbooks',
}).then(function(e){
this.books=[...e.data.data]
}).catch(function(e){
console.log(e);
})
},
},
data(){
return{
books:[],
}
},
}
这段程序出错,books 为什么没有成功赋值呢?
答案请看下面
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
是this指向问题,因为axios是异步执行,所以此时的this为undefined,才没有让books成功赋值,正确的应该是利用闭包来对主线程的this进行保存如下正确代码:
<script>
import axios from 'axios';
axios.defaults.baseURL='http://123.57.109.30:3006'
export default {
methods:{
getBook(){
let that=this//用把this赋值给that
axios({
method:"GET",
url:'/api/getbooks',
}).then(function(e){
that.books=[...e.data.data]
}).catch(function(e){
console.log(e);
})
},
},
data(){
return{
books:[],
}
},
}