实现功能:发表评论、本地存储、显示列表
v-for循环输出localStorage.getItem('')JSON.parse将字符串转为数组对象,这里就需要注意,localStorage列表可能为空或者不存在,那我们就需要转为一个空数组,而不是null,所以我们可以返回一个[]unshiftJSON.stringify将数组对象转为字符串数据,调用localStorage.setItem保存至localStorage,最后将input框置为空this.$emit,当点击评论时,页面重新加载数据,调用父组件定义的方法<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <link href="./bootstrap.min.css"> <script src="./vue.js"></script> </head> <body> <div id="app"> <addc @fn='renderList'></addc> <ul class="list-group"> <li class="list-group-item" v-for="(item, index) in list" :key="index">{{item.ucom}} <span class="badge">{{item.uname}}</span> </li> </ul> </div> <script id="tmp" type="text/x-template"> <div class="form-inline"> <div class="form-group"> <label>评论人:</label> <input type="text" class="form-control" id="" v-model="user"> </div> <div class="form-group"> <label>评论内容:</label> <textarea type="text" class="form-control" id="" v-model="ucoms"></textarea> </div> <button type="submit" class="btn btn-primary" @click='add'>发表评论</button> </div> </script> <script> let comp = { template: '#tmp', data() { return { user: '', ucoms: '' } }, methods: { add() { let cons = { id: new Date(), uname: this.user, ucom: this.ucoms } let list = JSON.parse(localStorage.getItem('cusm') || '[]')//把列表转化成数组对象 list.unshift(cons)//追加到数组对象 //转化成新的字符串,放到localStorage里面 localStorage.setItem('cusm', JSON.stringify(list)) this.user = this.ucoms = ''//文本框清空 this.$emit("fn") } }, } new Vue({ el: '#app', data: { // list: [ // { id: new Date(), uname: '张世超', ucom: '帅吗?' } // ] list: '' }, methods: { renderList() { let nMsg = localStorage.getItem('cusm') this.list = JSON.parse(nMsg) }, }, components: { // 注册组件 "addc": comp }, created() { this.renderList() }, }) </script> </body> </html>