vue组件实现发表评论功能

vue组件实现发表评论功能

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

今天看了vue相关的视频,所以跟着做一个小demo把知识串联起来,内容很简单但是也算是学习道路上的一点进步。

1 思路分析

发表评论模块写入一个组件,提高复用性。
关键点:

1)、子组件通过localStorage向父组件传值
2)、子组件有自己的data存储user和content,即评论人和评论内容,也就是dom元素绑定的数据。
3)、点击‘发表评论’后,首先是将各条评论存入localStorage,然后通过在组件出绑定的函数调用父组件中的loadComments()加载评论。
4)、vue生命周期的熟悉。在created()中写入loadComments(),每次页面加载就会载入评论数据。

2 源代码

需要vue.js和bootstrap.js两个文件

<!DOCTYPE html> <html> <head>     <meta charset="utf-8" />     <meta http-equiv="X-UA-Compatible" content="IE=edge">     <title>Page Title</title>     <meta name="viewport" content="width=device-width, initial-scale=1">     <script src="../lib/vue.js"></script>     <link rel="stylesheet" href="../lib/bootstrap.css">     <style>     li{         list-style:none;     }     </style> </head> <body>     <div id="app">         <com @func="loadComments"></com>         <ul class="list-group">             <li class="list-group-item" v-for="item in list">                 {{item.content}}<span class="badge">{{item.user}}</span>             </li>         </ul>     </div>         <!-- 评论区组件 -->     <template id="tmp">         <div>             <div class="form-group"><label>评论人</label><input class="form-control" id="user" v-model:value="user"/></div>              <div class="form-group"><label>评论内容</label><input class="form-control" id="content" v-model:value="content"/></div>                    <div><input type="button" class="btn btn-primary" value="发表评论" @click="postComments"/></div>         </div>     </template>     <script>     var tmp={         template:"#tmp",         data:function(){             return {                 user:'',                 content:''             }         },         methods:{             postComments(){                 var comment={user:this.user,content:this.content};                 var list=JSON.parse(localStorage.getItem('cmts')||'[]');                 list.unshift(comment);                 localStorage.setItem('cmts',JSON.stringify(list));//数组对象和字符串相互转换的过程                 this.user='';                 this.content='';                 this.$emit('func');             }         }     }     var vm=new Vue({         el:"#app",         data:{             list:[]         },         created(){            this.loadComments();         },         methods:{             loadComments(){                 this.list=JSON.parse(localStorage.getItem('cmts')||'[]');             }         },         components:{             'com':tmp         }     });     </script> </body> </html>

推荐阅读