zoukankan      html  css  js  c++  java
  • Vue(小案例_vue+axios仿手机app)_实现用户评论

    一、前言                                                                                  

                                   1、渲染评论列表

                                   2、点击加载按钮,加载更多

                                   3、提交评论

    二、主要内容                                                                           

    1、评论列表一般是注册到一个全局的公共组件中

    2、请求后台数据,渲染评论列表

      (1)数据格式如下

    地址

    /api/getcomments/:artid?pageindex=1

    作用描述

    根据资讯id获取它的评论的分页信息

    请求方式

    Get

    传入api的参数

    artid: 资讯id,这个id是用来区分是哪一个页面中的评论数据

    pageindex: 分页的页码,表示当前第几页

    传入url写法: /api/getcomments/43?pageindex=1

    返回数据格式

    Json

    返回数据格式样例

     

     

      (2)如何获取到父组件的id,  这里用到子父组件通信

      a:在父组件中用自定义一个cid属性

    <Comment   :cid="$route.query.id"    />
    
    //获取到路由上面的id参数

      b:在子组件Comment.vue中接收这个属性,然后作为Comment里面的查询参数

        props:['cid'], //接收到父组件定义的自定义属性

      c:根据上面接收到的自定义属性进行查询,查询到对应的评论信息

           d:用户还可能输入url地址中的page来查询

    data(){
                return {
                    comments:[]
                }
            },
    
            created(){
                //用户在查看评论列表的时候还可能在上面输入
                let page = this.$route.query.page || '1'; //从url地址中获取到当前的page,如果没有默认加载第一页
                //查询的时候带着这个page查询
                this.$axios.get(`getcomments/${this.cid}?pageindex=${page}`)
                .then(res=>{
                    console.log(res.data.message);
                    this.comments=res.data.message;
                })
                .catch(err=>{
                    console.log('数据请求失败',err);
                })
    
            }

    3、查看评论,点击加载按钮,加载更多(通常评论信息不会全部渲染到页面中的,)

      (1)给按钮注册一个loadMore()方法,点击的时候传进去url地址栏中的page

    <Button @click='loadMore(page)'>加载更多</Button>

      (2)声明loadMore()

        (3)当用户每点击一次的时候,就让当前的page++

     export default{
            name:'Comment',
            props:['cid'],//接受父组件传过来的自定义属性
            data(){
                return {
                    comments:[],
                    page:1
                }
            },
    
            methoods:{
                loadMore(page){
                    this.$axios.get(`getcomments${this.cid}?pageindex=${this.page}`)
                    .then(res=>{
                    console.log(res.data.message);
                    this.comments=res.data.message;
    
                    if(page){
                        //表示加载更多,将新一页的数据追加到原来的里面
                        this.comments = this.comments.concat(res.data.message);
                    }else{
    
                        //否则第一次加载
                        this.comments = res.data.message;
                    }
    
                    this.page++;
    
                    })
                    .catch(err=>{
                    console.log('数据请求失败',err);
                    })
    
                }
            },
            created(){
                //用户在查看评论列表的时候还可能在上面输入
                let page = this.$route.query.page || '1'; //
                this.loadMore(page);
                
            }

    4、提交评论

      (1)数据如下

    地址

    /api/postcomment/:artid

    作用描述

    给某条资讯进行评论

    请求方式

    Post

    传入api的参数

    artid: 资讯id,

    content: 评论的内容

    传入url写法:/api/postcomment/43

    请求报文体Body格式:

    content=评论内容

       (2)点击提交按钮,执行提交按钮方法,并且要个文本域双向数据绑定

                    <li class="txt-comment">
                        <textarea v-model='commentContent'></textarea>
                    </li>
                    <li>
                        <button @click='commentHandle'>提交</button>
                    </li>

      (3)在methods中定义

    //处理提交评论请求,并且将评论信息,添加到postcomment/:${this.cid}中
    
     commentHandle(){
                    this.$axios.post(`postcomment/:${this.cid}`,'conetent='+this.commentContent)
                    .then(res=>{
                        console.log(res.data.message);
    
                    })
                    .catch(err=>{
                        console.log('评论失败',err);
                    })
    
                }

      (4)提交评论信息之后还需要清空当前这个评论框的文本内容,然后再加载第一页数据

     methoods:{
                commentHandle(){
                    this.$axios.post(`postcomment/:${this.cid}`,'conetent='+this.commentContent)
                    .then(res=>{
                        console.log(res.data.message);
    
                        this.commentContent=''; //清空评论框
                        this.page=1;//然后加载第一页数据
                        this.loadMore();
    
                    })
                    .catch(err=>{
                        console.log('评论失败',err);
                    })
    
                },

    三、总结                                                                                  

     1、查看评论,用户可能要查看其它页的评论信息,所以在请求的时候带了一个page参数

    2、加载更多,用户每次点击加载更多按钮,让当前的page++, 并且将新请求到的一页的数据用concat连接到上次请求到的数据中

    3、提交评论,用post提交,提交了之后要清空当前的文本域,然后再加载第一页的数据

    虽然现在走得很慢,但不会一直这么慢
  • 相关阅读:
    H5 + 3D + AR/VR 综述
    10中典型的软件开发模型
    总线宽度VS总线带宽
    最全程序设计流程、技术、工具、交付结果【软件全生命周期】
    一幅图读懂面向对象和面向过程程序设计的区别!
    C语言实现计算器,附源码,超简单!
    request.getRequestDispatcher()的两个方法forward()/include()!!!
    关于使用ResultSet ---结果集没有当前行
    JComboBox添加item的赋值类型问题!不一致的话会导致不能更改jcombobox的选择值
    关于String的两种赋值方式
  • 原文地址:https://www.cnblogs.com/xxm980617/p/10701030.html
Copyright © 2011-2022 走看看