【vue】vue组件发表评论功能
今天看了vue相关的视频,所以跟着做一个小demo把知识串联起来,内容很简单但是也算是学习道路上的一点进步。1 思路分析发表评论模块写入一个组件,提高复用性。关键点:子组件通过localStorage向父组件传值子组件有自己的data存储user和content,即评论人和评论内容,也就是dom元素绑定的数据。点击‘发表评论’后,首先是将各条评论存入localStorage,然后通过...
·
今天看了vue相关的视频,所以跟着做一个小demo把知识串联起来,内容很简单但是也算是学习道路上的一点进步。
1 思路分析
发表评论模块写入一个组件,提高复用性。
关键点:
- 子组件通过localStorage向父组件传值
- 子组件有自己的data存储user和content,即评论人和评论内容,也就是dom元素绑定的数据。
- 点击‘发表评论’后,首先是将各条评论存入localStorage,然后通过在组件出绑定的函数调用父组件中的loadComments()加载评论。
- 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>
更多推荐
已为社区贡献1条内容
所有评论(0)