Ajax请求
参考:Ajax
Promise
参考:Promise
Axios
参考:Axios
fetch
参考:fetch
Async
参考:async
图书管理重构
展示列表
列表展示即后台请求数据,然后放到vue对象列表中。
请求数据使用axios
进行请求,为了方便后续操作,先对axios
对象设置基于地址与拦截器(直接返回相应内容)。
1 2 3 4 5 6
| axios.defaults.baseURL = 'http://localhost:3000/'; axios.interceptors.response.use(function(res){ return res.data; }, function(error){ console.log(error) });
|
接下来在全局对象中定义一个方法用于获取数据
1 2 3 4 5
| methods: { queryData: async function(){ this.books = await axios.get('books'); } },
|
接下来只需要调用这个方法即可将列表的数据替换为获取的数据。
1 2 3
| mounted: function(){ this.queryData(); }
|
添加图书
添加图书发送一个post请求即可,其携带需要添加的名称。因此修改handle方法的else分支。
1 2 3 4 5 6 7 8
| var ret = await axios.post('books', { name: this.name }) if(ret.status == 200) { this.queryData(); }
|
验证图书是否存在
1 2 3 4 5 6 7 8 9 10 11 12 13
| watch: { name: async function(val) { var ret = await axios.get('/books/book/' + this.name); if(ret.status == 1) { this.submitFlag = true; }else{ this.submitFlag = false; } } },
|
编辑图书
当点击触发toEdit
事件时,应首先查询最新数据并填充到表单。因此:
1 2 3 4 5 6 7 8
| toEdit: async function(id){ this.flag = true; var ret = await axios.get('books/' + id); this.id = ret.id; this.name = ret.name; },
|
修改完成后重新修改提交事件即handle
方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| handle: async function(){ if(this.flag) { var ret = await axios.put('books/' + this.id, { name: this.name }); if(ret.status == 200){ this.queryData(); } this.flag = false; }else{ var ret = await axios.post('books', { name: this.name }) if(ret.status == 200) { this.queryData(); } } this.id = ''; this.name = ''; },
|
删除
1 2 3 4 5 6 7 8
| deleteBook: async function(id){ var ret = await axios.delete('books/' + id); if(ret.status == 200) { this.queryData(); } },
|