vue组件发表评论功能
ljs_coding 人气:0今天看了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>
加载全部内容