vue之发表评论

本文介绍了一个基于Vue.js的简单网页应用,该应用利用HTML、CSS和JavaScript实现了用户评论功能,并通过LocalStorage存储和读取评论数据。文章展示了如何构建用户界面、处理用户输入以及持久化数据。
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<link rel="stylesheet" href="bootstrap-3.3.7.css"/>
		<title></title>
	</head>
	<script src="vue-2.4.0.js"></script>
	<body>
	<div id="app">
		<ctm @func="show"></ctm>
		<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" class="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" class="btn-primary" value="发表评论" @click="postComment"/>
			 </div>
		 </div>
	 </template>
	 <script>
			var com={
				template:'#tmp1',
				data(){
					return{
						user:'',
						content:''
					}
				},
				methods:{
					postComment(){
						//得到的先摆出来
						var comments={id:Date.now(),user:this.user,content:this.content}
						//获取之前列表所有的内容,由字符串形式转换成对象形式
						var list=JSON.parse(localStorage.getItem('cmt')||'[]')
						//往list列表里面追加
						list.unshift(comments)
						//然后存到localStorage里面去,转化为字符串形式
						localStorage.setItem('cmt',JSON.stringify(list))
						this.user=this.content=''
						this.$emit('func')
					}
				}
			}
	 		  // 创建 Vue 实例,得到 ViewModel
	 		  var vm = new Vue({
	 		    el: '#app',
	 		    data: {
	 				list:[
						{id:Date.now(),user:'小小',content:'天生我材必有用'},
						{id:Date.now(),user:'小小1',content:'天生我材'},
					]	
	 			},
				//使用生命周期函数,created函数已经把data和methods创建好了,必须用this
				//需要自动刷新,所以要用到父组件为子组件传递方法
				created(){
					this.show()
				},
				methods: {
					show(){
						//显示,先获取localStorage的内容,转为对象
						var list=JSON.parse(localStorage.getItem('cmt')||'[]')
						this.list=list
					}
					},
				components:{
					'ctm':com
				}
				})
	</script>
	</body>
</html>

在这里插入图片描述

### 实现回复评论发表评论功能 在 Vue2 项目中实现回复评论发表评论的功能涉及多个方面,包括前端组件的设计、数据绑定以及后端API的交互。 #### 前端部分:Vue 组件设计 为了处理评论及其子评论(即嵌套评论),可以创建一个 `Comment` 组件来展示每条评论,并允许用户添加新的回复。此组件应能够接收父级传递下来的属性(props),比如该条目的 ID 和初始评论列表;同时也应该具备触发事件的能力以便通知外部状态变化。 对于新增加的一级或二级评论操作,则可以通过调用相应的 API 接口完成提交动作,在成功之后更新本地的数据模型以反映最新的服务器响应结果[^1]。 ```html <template> <div class="comment"> <!-- 显示现有评论 --> <ul v-for="(item, index) in comments" :key="index"> <li>{{ item.content }}</li> <button @click="toggleReplyBox(item)">回复</button> <!-- 子评论区域 --> <transition name="fade"> <div v-if="showReply[item.id]" class="reply-box"> <input type="text" placeholder="输入您的回复..." v-model.trim="newReplyContent"/> <button @click="submitReply(item)">发送</button> </div> </transition> <!-- 展示已有的子评论 --> <ul v-if="item.replies && item.replies.length > 0"> <li v-for="(subItem, subIndex) in item.replies" :key="subIndex">{{ subItem.content }}</li> </ul> </ul> <!-- 添加新顶级评论 --> <textarea rows="4" cols="50" v-model.trim="newComment"></textarea> <button @click="addNewComment">发布评论</button> </div> </template> <script> export default { data() { return { newComment: '', showReply: {}, newReplyContent: '' } }, props: ['comments'], methods: { toggleReplyBox(comment){ this.$set(this.showReply, comment.id, !this.showReply[comment.id]); }, submitReply(parentComment){ const reply = { content: this.newReplyContent }; // 这里假设有一个名为 'api' 的服务用于发起 HTTP 请求 api.post(`/replies/${parentComment.id}`, reply).then(response => { parentComment.replies.push({...response.data}); // 清除输入框并关闭回复框 this.newReplyContent = ''; this.toggleReplyBox(parentComment); }); }, addNewComment(){ if (this.newComment === '') return; let newCommmentObj = {content:this.newComment}; api.post('/comments', newCommmentObj ).then((res)=>{ this.comments.unshift(res.data); this.newComment=''; }) } } } </script> ``` 上述代码片段展示了如何构建一个简单的评论系统界面,其中包含了对一级评论和支持多层嵌套结构的支持。通过监听按钮点击事件切换显示隐藏的状态(`v-show`)控制回复框的可见性,并利用双向绑定机制(`v-model`)获取用户的输入内容。当用户决定发送一条消息时,会先将其保存至临时变量内再执行实际的网络请求,最后根据返回的结果刷新视图中的相应位置。 #### 后端接口对接 考虑到前后分离架构的应用场景,通常情况下客户端不会直接操作数据库而是借助 RESTful 风格的服务来进行通信。因此需要定义好一套合理的路由规则和服务端逻辑来满足业务需求。例如: - POST `/comments`: 创建一个新的顶层评论; - GET `/comments/{id}/replies`: 获取指定ID下的所有子评论; - POST `/replies/{parentId}`: 在给定父节点下追加一条新的回复记录。 具体实现细节取决于所选用的技术栈,如ThinkPHP框架提供了便捷的方式来快速搭建RESTful Web Service[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值