vue开发实现评论列表

本文实例为大家分享了vue开发实现评论列表的具体代码,供大家参考,具体内容如下

index.html

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width,initial-scale=1.0">
    <link rel="stylesheet" href="./static/css/bootstrap.css">
    <title>y</title>
  </head>
  <body>
    <div id="app"></div>
    <!-- built files will be auto injected -->
  </body>
</html>

main.js

// The Vue build version to load with the `import` command
// (runtime-only or standalone) has been set in webpack.base.conf with an alias.
import Vue from 'vue'
import App from './App'

Vue.config.productionTip = false

/* eslint-disable no-new */
new Vue({
  el: '#app',
  components: { App },
  template: '<App/>',
})

App.vue

<template>
  <div id="app">
    <header class="site-header jumbotron">
      <div class="container">
        <div class="row">
          <div class="col-xs-12">
            <h1>请发表对vue的评论</h1>
          </div>
        </div>
      </div>
    </header>

    <div class="container">
      <Add :addComment="addComment"/>
      <List :comments="comments" :deleteComment="deleteComment"/>
    </div>
  </div>
</template>

<script>
  import Add from './components/Add.vue'
  import List from './components/List.vue'

  export default {

    data() {
      return {  //数据在哪个组件,更新数据的行为就在哪个组件
        comments: [{
            name: 'BoB',
            content: 'Vue还不错'
          },
          {
            name: 'Cat',
            content: 'Vue so easy'
          },
          {
            name: 'Xhong',
            content: 'Vue so so'
          }
        ]
      }
    },

    methods: {
      //添加评论
      addComment(comment){
        this.comments.unshift(comment)
      },
      //删除指定的评论
      deleteComment(index){
        this.comments.splice(index,1)
      }
    },

    components: {
      Add,
      List
    }
  }
</script>

<style>

</style>

Add.vue

<template>
  <div class="col-md-4">
    <form class="form-horizontal">
      <div class="form-group">
        <lable>用户名</lable>
        <input type="text" class="form-control" placeholder="用户名" v-model="name">
      </div>
      <div class="form-group">
        <lable>评论内容</lable>
        <textarea class="form-control" cols="30" rows="6" placeholder="评论内容" v-model="content"></textarea>
      </div>
      <div class="form-group">
        <div class="col-sm-offset-2 col-sm-10">
          <button type="button" class="btn btn-default pull-right" @click="add">提交</button>
        </div>
      </div>
    </form>
  </div>
</template>

<script>
  export default {
    props: {
      addComment: {
        type:Function,
        required:true
      }
    },
    data() {
      return {
        name: '',
        content: ''
      }
    },
    methods: {
      add() {
          //检查输入的合法性
          const name=this.name.trim();
          const content=this.content.trim();
          if(!name || !content){
            alert('姓名或内容不能为空')
            return
          }

         //根据输入的数据封装成一个对象
          const comment = {
            name,
            content
          }
          //添加到comments中
          this.addComment(comment)

          //清除数据
          this.name = ''
          this.content = ''

      }
    }
  }
</script>

<style>
</style>

List.vue

<template>
  <div class="col-md-8">
    <h3 class="reply">评论回复:</h3>
    <h2 v-show="comments.length===0">暂无评论,点击左侧添加评论!!!</h2>
    <ul class="list-group">
      <Item v-for="(comment, index) in comments" :key="index" :comment="comment" :deleteComment="deleteComment" :index="index"/>
    </ul>
  </div>
</template>

<script>
  import Item from './Item.vue'

  export default {
    //声明接受属性,这个属性就会成为组件对象的属性
    props:['comments','deleteComment'],

    components:{
      Item
    }
  }
</script>

<style>
  .reply {
    margin-top: 0px;
  }
</style>

Item.vue

<template>
  <li class="list-group-item">
    <div class="handle">
      <a href="javascript:;" @click="deleteItem">删除</a>
    </div>
    <p class="user"><span>{{comment.name}}</span><span>说:</span></p>
    <p class="centence">{{comment.content}}</p>
  </li>
</template>

<script>

  export default {
    props: { //指定属性名和属性值得类型
      comment: Object,
      deleteComment: Function,
      index: Number
    },

    methods: {
      deleteItem() {
        const {comment,deleteComment,index}=this
        if(window.confirm(`确定删除${comment.name}的评论吗?`)){
          deleteComment(index)
        }
      }
    }
  }

</script>

<style>
  li {
    transition: .5s;
    overflow: hidden;
  }

  .handle {
    width: 40px;
    border: 1px solid #CCCCCC;
    background: #FFFFFF;
    position: absolute;
    right: 10px;
    top: 1px;
    text-align: center;
  }
  .handle a {
    display: block;
    text-decoration: none;
  }
  .list-group-item .centence {
    padding: 0px 50px;
  }

  .user {
    font-size: 22px;
  }
</style>

目录结构

最终效果

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Vue.js实现文章评论和回复评论功能

    本来想把这个页面用jade渲染出来.评论部分用vue,但是想了想觉得麻烦,最后还是整个用vue的组件搞定他吧. 先上在线demo:http://jsbin.com/ceqifo/1/edit?js,output 再上效果图 可直接评论,点击别人的评论能回复别人的评论. html <div id="comment"> <article-content v-bind:article="article"></article-content&g

  • Vue组件实现评论区功能

    本文实例为大家分享了Vue组件实现评论区的具体代码,供大家参考,具体内容如下 实现代码 <!DOCTYPE html> <html lang="en"> <head>     <meta charset="utf-8">     <meta name="viewport" content="width=device-width, inital-scale=1.0">

  • vue实现评论列表

    本文实例为大家分享了vue实现评论列表的具体代码,供大家参考,具体内容如下 案例数据使用localStorage持久性存储 全局过滤器实现时间格式化 代码部分 <!DOCTYPE html> <html lang="zh">     <head>         <meta charset="UTF-8">         <meta name="viewport" content="

  • Vue实现简单的发表评论功能

    本文实例为大家分享了Vue实现简单的发表评论功能的具体代码,供大家参考,具体内容如下 1.这是我在学习中的实例,有些的不足的地方,还望各位大佬指点,感谢哦~ 2.发表评论的效果图 点击"发表"之后的效果(每条评论之后点击"删除"可以删掉这一整条评论~) 3.完整代码展示(我html结构写的比较乱,这里提醒大家一下,没有定义类的div是可以删掉的,我是因为方便写样式所以多加了div) 还是要提醒一下,不要忘记引入vue.js,目录记得根据自己存放的位置改 <!D

  • Vuepress 搭建带评论功能的静态博客的实现

    vuepress 是 Vue 驱动的静态站点生成工具 本文仅介绍,搭建静态博客的过程,具体教程及文档请点击进入 vuepress中文网 点击查看项目代码 vuepress初始化 下面初始化 # 将 github 新创建的仓库克隆到本地 git clone git@github.com:zhb333/readme-blog.git # 进入项目 cd readme-blog # npm 初始化, 按照提示回车 npm init # 安装 vuepress npm i vuepress -D # 安

  • vue组件实现发表评论功能

    本文实例为大家分享了vue组件实现发表评论的具体代码,供大家参考,具体内容如下 今天看了vue相关的视频,所以跟着做一个小demo把知识串联起来,内容很简单但是也算是学习道路上的一点进步. 1 思路分析 发表评论模块写入一个组件,提高复用性.关键点: 1).子组件通过localStorage向父组件传值2).子组件有自己的data存储user和content,即评论人和评论内容,也就是dom元素绑定的数据.3).点击‘发表评论’后,首先是将各条评论存入localStorage,然后通过在组件出绑

  • vue实现发表评论功能

    本文实例为大家分享了vue实现发表评论的具体代码,供大家参考,具体内容如下 <!DOCTYPE html> <html>     <head>         <meta charset="utf-8">         <link rel="stylesheet" href="bootstrap-3.3.7.css" />         <title></title

  • vue实现文章评论和回复列表

    本文实例为大家分享了vue实现文章评论和回复列表的具体代码,供大家参考,具体内容如下 效果预览: 父组件: <template>   <div class="comment-reply">     <div       v-for="(item, index) in articleLists"       :key="index"       class="article-list"     &g

  • VUE+Java实现评论回复功能

    背景 最近需要做一个多级评论的功能,技术路线:VUE(Element)+Java(SpringBoot) 效果 后台 SQL Java Controller /**   * 根据关联id获取评论信息   * @param relationId 关联id   * @param type 类型   * @return: com.harvey.result.ResultSupport<java.lang.Object>   * @date: 2020/12/10 14:37   */  @GetMa

  • vue实现评论列表功能

    具体代码如下所示: <!DOCTYPE html> <html> <head> <title>简易评论列表</title> <meta charset="utf-8"> <link rel="stylesheet" href="node_modules\bootstrap\dist\css\bootstrap.css" rel="external nofoll

随机推荐