美文网首页
案例-图书列表接口案例

案例-图书列表接口案例

作者: 新苡米 | 来源:发表于2021-03-22 21:20 被阅读0次

    1. 基于接口案例-获取图书列表

    • 导入axios 用来发送ajax
    • 把获取到的数据渲染到页面上
    <div id="app">
            <div class="grid">
                <table>
                    <thead>
                        <tr>
                            <th>编号</th>
                            <th>名称</th>
                            <th>时间</th>
                            <th>操作</th>
                        </tr>
                    </thead>
                    <tbody>
                        <!-- 5.  把books  中的数据渲染到页面上   -->
                        <tr :key='item.id' v-for='item in books'>
                            <td>{{item.id}}</td>
                            <td>{{item.name}}</td>
                            <td>{{item.date }}</td>
                            <td>
                                <a href="">修改</a>
                                <span>|</span>
                                <a href="">删除</a>
                            </td>
                        </tr>
                    </tbody>
                </table>
            </div>
        </div>
        <script type="text/javascript" src="js/vue.js"></script>
        1.  导入axios   
        <script type="text/javascript" src="js/axios.js"></script>
        <script type="text/javascript">
            /*
                 图书管理-添加图书
             */
            # 2   配置公共的url地址  简化后面的调用方式
            axios.defaults.baseURL = 'http://localhost:3000/';
            axios.interceptors.response.use(function(res) {
                return res.data;
            }, function(error) {
                console.log(error)
            });
    
            var vm = new Vue({
                el: '#app',
                data: {
                    flag: false,
                    submitFlag: false,
                    id: '',
                    name: '',
                    books: []
                },
                methods: {
                    # 3 定义一个方法 用来发送 ajax 
                    # 3.1  使用 async  来 让异步的代码  以同步的形式书写 
                    queryData: async function() {
                        // 调用后台接口获取图书列表数据
                        // var ret = await axios.get('books');
                        // this.books = ret.data;
                        # 3.2  发送ajax请求  把拿到的数据放在books 里面   
                        this.books = await axios.get('books');
                    }
                },
    
                mounted: function() {
                    #  4 mounted  里面 DOM已经加载完毕  在这里调用函数  
                    this.queryData();
                }
            });
        </script>
    

    2 添加图书

    • 获取用户输入的数据 发送到后台
    • 渲染最新的数据到页面上
     methods: {
        handle: async function(){
              if(this.flag) {
                // 编辑图书
                // 就是根据当前的ID去更新数组中对应的数据
                this.books.some((item) => {
                  if(item.id == this.id) {
                    item.name = this.name;
                    // 完成更新操作之后,需要终止循环
                    return true;
                  }
                });
                this.flag = false;
              }else{
                # 1.1  在前面封装好的 handle 方法中  发送ajax请求  
                # 1.2  使用async  和 await 简化操作 需要在 function 前面添加 async   
                var ret = await axios.post('books', {
                  name: this.name
                })
                # 1.3  根据后台返回的状态码判断是否加载数据 
                if(ret.status == 200) {
                 # 1.4  调用 queryData 这个方法  渲染最新的数据 
                  this.queryData();
                }
              }
              // 清空表单
              this.id = '';
              this.name = '';
            },        
     }         
    

    3 验证图书名称是否存在

    • 添加图书之前发送请求验证图示是否已经存在
    • 如果不存在 往后台里面添加图书名称
    • 图书存在与否只需要修改submitFlag的值即可
     watch: {
            name: async function(val) {
              // 验证图书名称是否已经存在
              // var flag = this.books.some(function(item){
              //   return item.name == val;
              // });
              var ret = await axios.get('/books/book/' + this.name);
              if(ret.status == 1) {
                // 图书名称存在
                this.submitFlag = true;
              }else{
                // 图书名称不存在
                this.submitFlag = false;
              }
            }
    },
    

    4. 编辑图书

    • 根据当前书的id 查询需要编辑的书籍
    • 需要根据状态位判断是添加还是编辑
    methods: {
            handle: async function(){
              if(this.flag) {
                #4.3 编辑图书   把用户输入的信息提交到后台
                var ret = await axios.put('books/' + this.id, {
                  name: this.name
                });
                if(ret.status == 200){
                  #4.4  完成添加后 重新加载列表数据
                  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 = '';
            },
            toEdit: async function(id){
              #4.1  flag状态位用于区分编辑和添加操作
              this.flag = true;
              #4.2  根据id查询出对应的图书信息  页面中可以加载出来最新的信息
              # 调用接口发送ajax 请求  
              var ret = await axios.get('books/' + id);
              this.id = ret.id;
              this.name = ret.name;
            },
    

    5 删除图书

    • 把需要删除的id书籍 通过参数的形式传递到后台
     deleteBook: async function(id){
              // 删除图书
              var ret = await axios.delete('books/' + id);
              if(ret.status == 200) {
                // 重新加载列表数据
                this.queryData();
              }
       }
    

    相关文章

      网友评论

          本文标题:案例-图书列表接口案例

          本文链接:https://www.haomeiwen.com/subject/xhmthltx.html