美食杰-------展示评论区内容

这篇博客介绍了如何利用Vue.js和JavaScript获取后台数据并渲染评论区,通过数据双向绑定实现用户输入,以及利用点击事件触发数据提交。文章详细讲解了v-model和v-for指令的应用,并提到了send系统调用函数在套接字通信中的限制。
摘要由CSDN通过智能技术生成

介绍:首先我们要拿到后台数据,来渲染视图,而后写点击事件来实现路由的跳转和数据的交互,拿到数据,渲染视图,让我们来看一看效果图:

 思路:

首先拿到数据,渲染视图,而后给输入框写上数据双向绑定,再给提交写上点击事件,使数据点击提交时展示在评论区

在data里面定义一个变量,让它为空,因为输入的是数字,可以写成字符串形式,写好之后,用v-model绑定这个变量在输入框,在下面的评论区写上v-for循环这个变量,再进行数据渲染。在数据挂载之前展示路由信息和视图的交互。

给提交写上一个点击事件,当事件触发时执行。

其中调用了封装好的两个方法getComments和postComment。

/**
 * 获取菜谱评论信息
 * @export
 * @param {Object} [params] - 
 * @param {string} [params.menuId] - 指定菜谱的id
 * @returns
 */
export async function getComments(params){
  return await http.get('/menu/comment', {params});
}
/**
 * 提交菜谱评论信息
 * @export
 * @param {Object} [params] - 
 * @param {string} [params.menuId] - 指定评论的菜谱id
 * @param {string} [params.commentText] - 评论内容
 * @returns
 */
export async function postComment(params){
  return await http.post('/menu/comment', params);
}
<template>
  <div class="comment-box">
    <h2>{{info.title}}的讨论</h2>
    <div class="comment-text">
      <a href="javascript:;" class="useravatar">
        <img :src="userInfo.avatar">
      </a>
      <div  >请先登录后,再评论<router-link to="">登录</router-link></div>
      
      <div class="comment-right">
        <el-input
          type="textarea"
          :rows="5"
          :cols="50"
          placeholder="请输入内容"
          v-model="commentText"
        >
        </el-input>
        <div class="comment-button" >
          <el-button 
            class="send-comment" 
            type="primary" 
            size="medium"
            @click="send"
          >提交</el-button>
        </div>
      </div>
    </div>
    <div class="comment-list-box">
      <ul class="comment-list">
        <li v-for="item in comments" :key="item.commentId">
          <a target="_blank" href="https://i.meishi.cc/cook.php?id=14026963" class="avatar">
           
          </a>
          <router-link :to="{name:'space',query:{userId:item.userInfo.userId}}" class="avatar">
            <img :src="item.userInfo.avatar">
            <h5>{{item.userInfo.name}}</h5>
          </router-link>
          <div class="comment-detail">
            <p class="p1">{{item.commentText}}</p>
            <div class="info clearfix">
              <span style="float: left;">{{item.createdAt}}</span>
            </div>
          </div>
        </li>
      </ul>
    </div>
  </div>
</template>
<script>
import {getComments,postComment} from '@/service/api';
export default {
  name: 'Comment',
  props:{
    info: {
      type: Object,
      default: () => ({})
    }
  },
  data(){
    return {
      comments:[],
      commentText:''
    }
  },
  computed: {
    userInfo(){
      return this.$store.state.userInfo;
    }
  },
  async mounted(){
    let {menuId}=this.$route.query;
    // console.log("this.info.menuId",this.info.menuId)
    if(menuId){
     let data= await getComments({menuId:menuId});
     console.log(data)
     this.comments=data.data.comments;
    }

  },
  methods:{
    // 点击提交
      async send(){
        // console.log(111)
        let data=await postComment({menuId:this.info.menuId,commentText:this.commentText})
        console.log(data)
        this.comments.unshift(data.data.comments);
        this.commentText='';
      }
  }
}
</script>
<style lang="stylus">
.comment-box
  background-color #ffffff
  margin-top 20px
  padding 0 20px
  h2
    font-size 24px
    color #333
    height 66px
    line-height 66px
    border-bottom 1px solid #eee
  .comment-text
    margin-top 20px
    .useravatar
      margin-right 20px
      img 
        vertical-align top
        width 36px
        height 36px
    .comment-right 
      display inline-block
      width 80%
      .comment-button
        text-align right 
        margin-top 10px
        .send-comment
          background #ff3232
          border none
  .comment-list-box
    border-top 1px solid #eee
    margin-top 20px
    padding-top 30px

    ul li 
      border-bottom 1px solid #eee
      margin-bottom 20px
      .avatar
        height 82px
        width 50px
        overflow hidden
        display inline-block
        h5
          white-space nowrap
        img 
          height 50px
          width 50px
      .comment-detail
        display inline-block
        vertical-align top
        margin-left 20px
        width 80%
        p 
          margin 0
          font-size 14px
        .info
          margin-top 10px
          color #999
          .thumbs
            cursor pointer
            
            font-size 18px
          .thumbs-actve
            color red
      

</style>

注意:

send:是一个系统调用函数,用来发送消息到一个套接字中,和sendto,sendmsg功能相似。

send()函数只能在套接字处于连接状态的时候才能使用。(只有这样才知道接受者是谁)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值