组件案例-评论列表(涉及父子组件之间的通信)

JS代码

主要业务逻辑写在代码注释中

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="utf-8">
	<title></title>
	<script type="text/javascript" src="js/vue.js"></script>
	<link rel="stylesheet" type="text/css" href="css/bootstrap.css">
</head>
<body>
	<div id="app">
		<com-box @func="loadComments"></com-box>
		<ul class="list-group">
			<li class="list-group-item" v-for="item in list" :key="item.id">
				<span class="badge">评论人:{{ item.user }}</span>
				{{ item.content }}
			</li>
		</ul>
	</div>

	<template id="tmp1">
		<div>
			<div class="form-group">
				<label>评论人:</label>
				<input type="text" calss="form-control" v-model="user">
			</div>
			<div class="form-group">
				<label>评论内容:</label>
				<textarea class="form-control" v-model="content"></textarea>
			</div>
			<div class="form-group">
				<input type="button" value="发表评论" class="btn btn-primary" @click="postComment">
			</div>
		</div>
	</template>

	<script>
		var comBox = {
			data(){
				return {
					user:'',
					content:''
				}
			},
			methods:{
				postComment(){//发表评论的方法
					//分析:发表评论的业务逻辑
					//1.评论数据存到哪里去?   存放到了localStorage中 localStorage.setItem('','')
					//2.先组织出一个最新的评论数据对象
					//3.想办法把第二步得到的评论对象保存到localStorage中
					// 3.1localStorage只支持存放字符串数据,要先调用JSON.Stringify
					// 3.2在保存最新的评论数据之前,要先从localStorage获取到之前的评论数据(String),转换为一个数组对象,然后把最新的评论push到这个数组中
					// 3.3如果获取到的localStorage中的评论字符串为空或者不存在,则可以返回一个'[]'让JSON.parse去转换
					// 3.4把最新的评论列表数组,再次调用JSON.stingify转换为数组字符串,然后
					// 调用localStorage.setItem()
					var comment = { id:Date.now(),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')

				}
			},
			template:'#tmp1'
		}

		var vm = new Vue({
			el:'#app',
			data:{
				list:[
					{id:Date.now()+'1',user:'yuyan',content:'力拔山河气盖世'},
					{id:Date.now()+'2',user:'anqi',content:'城里头的人脾气大得黑死人'},
					{id:Date.now()+'3',user:'wnz',content:'giao'}
				]
			},
			created(){
				this.loadComments()
			},
			methods:{
				loadComments(){//从本地的localStorage中加载评论列表
					var list = JSON.parse(localStorage.getItem('cmts') || '[]')
					this.list = list
				}
			},
			components:{
				'com-box':comBox
			}
		});
	</script>	
</body>
</html>

效果展示
在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章