下面是“Vue实现简单的发表评论功能”的完整攻略。
步骤一:创建基本的Vue项目
- 安装Vue CLI:在命令行中使用以下命令安装Vue CLI:
npm install -g @vue/cli
- 使用Vue CLI创建项目:在命令行中使用以下命令创建Vue项目:
vue create my-project
,其中my-project
是项目名称,可以自定义。 - 在浏览器中打开
http://localhost:8080
,确认项目已经创建成功。
步骤二:设计评论功能的数据结构
评论功能的数据结构包括评论者的名称、评论内容、评论时间等。我们可以在Vue实例中预定义一个comments数组,用于保存所有的评论:
data: {
comments: [
{name: '小明', content: '这篇文章写得很不错', time: '2019-01-01 10:00'},
{name: '小红', content: '我觉得可以再加些细节', time: '2019-01-02 15:00'},
{name: '小王', content: '谢谢分享,我学到了好多知识', time: '2019-01-03 20:00'},
],
commentName: '',
commentContent: ''
}
上面的代码定义了一个comments数组,其中每个元素包含三个属性:name、content和time。同时也定义了两个变量commentName和commentContent,分别用于存储评论者名称和评论内容。
步骤三:编写评论列表组件
评论列表组件是用于展示所有评论的组件,它包含一个template模板和一个script脚本。下面是具体的代码实现:
<template>
<div>
<h2>评论列表</h2>
<ul>
<li v-for="(comment, index) in comments" :key="index">
<span>{{ comment.name }}:</span>
<span>{{ comment.content }}</span>
<span>{{ comment.time }}</span>
</li>
</ul>
</div>
</template>
<script>
export default {
props: ['comments']
}
</script>
上面的代码定义了一个<comment-list>
组件,其中使用了v-for
指令循环遍历所有的评论,并在每个评论的前面展示评论者的名称、评论内容和时间。注意到该组件使用了一个props
属性,这个属性用于从父组件中接收comments数组的值。
步骤四:编写评论框组件
评论框组件是用于让用户发表新评论的组件,它包含一个template模板和一个script脚本。下面是具体的代码实现:
<template>
<div>
<h2>发表评论</h2>
<form>
<div>
<label>用户名:</label>
<input type="text" v-model="commentName">
</div>
<div>
<label>评论内容:</label>
<textarea v-model="commentContent"></textarea>
</div>
<button type="submit" v-on:click.prevent="addComment">发表评论</button>
</form>
</div>
</template>
<script>
export default {
data: function() {
return {
commentName: '',
commentContent: ''
}
},
methods: {
addComment: function() {
var comment = {
name: this.commentName,
content: this.commentContent,
time: new Date().toLocaleString()
};
this.$emit('add', comment);
this.commentName = '';
this.commentContent = '';
}
}
}
</script>
上面的代码定义了一个<comment-box>
组件,其中使用了v-model
指令双向绑定了commentName和commentContent两个变量,用于获取用户输入的评论内容。同时定义了一个addComment方法,用于创建新的评论对象,并使用$emit
方法向父组件传递这个评论对象。最后清空commentName和commentContent两个变量。
步骤五:在父组件中使用评论列表和评论框
在父组件中引入评论列表组件和评论框组件,同时也要在父组件中定义一个addComment方法,用于接收来自评论框组件的新评论,并将其push到comments数组中。下面是具体的代码实现:
<template>
<div>
<comment-list :comments="comments"></comment-list>
<comment-box @add="addComment"></comment-box>
</div>
</template>
<script>
import CommentList from './CommentList.vue'
import CommentBox from './CommentBox.vue'
export default {
components: {
'comment-list': CommentList,
'comment-box': CommentBox
},
data: function() {
return {
comments: [
{name: '小明', content: '这篇文章写得很不错', time: '2019-01-01 10:00'},
{name: '小红', content: '我觉得可以再加些细节', time: '2019-01-02 15:00'},
{name: '小王', content: '谢谢分享,我学到了好多知识', time: '2019-01-03 20:00'},
]
}
},
methods: {
addComment: function(comment) {
this.comments.push(comment)
}
}
}
</script>
上面的代码定义了一个<comment-box>
组件和一个<comment-list>
组件,并使用Vue的组件系统将它们引入到父组件中。同时定义了一个comments
数组用于存储所有的评论,并定义了一个addComment
方法,用于接收来自评论框组件的新评论,并将其push到comments数组中。
示例一:使用父组件中的v-bind指令向子组件传递数据
下面是一个简单的示例,通过v-bind指令向子组件传递一个字符串类型的message:
父组件:
<template>
<div>
<child-component v-bind:message="Hello world"></child-component>
</div>
</template>
<script>
import ChildComponent from './ChildComponent.vue'
export default {
components: {
'child-component': ChildComponent
},
}
</script>
子组件:
<template>
<div>{{ message }}</div>
</template>
<script>
export default {
props: ['message']
}
</script>
上面的代码中,在父组件中使用v-bind指令向子组件传递一个字符串类型的message,子组件通过props属性接收该参数并展示在页面中。
示例二:使用子组件中的$emit方法向父组件传递数据
下面是一个简单的示例,通过$emit方法向父组件传递一个字符串类型的message:
父组件:
<template>
<div>
<child-component v-on:send="receive"></child-component>
<div>{{ message }}</div>
</div>
</template>
<script>
import ChildComponent from './ChildComponent.vue'
export default {
components: {
'child-component': ChildComponent
},
data: function() {
return {
message: ''
}
},
methods: {
receive: function(msg) {
this.message = msg;
}
}
}
</script>
子组件:
<template>
<button v-on:click="send">发送消息</button>
</template>
<script>
export default {
methods: {
send: function() {
this.$emit('send', 'Hello world')
}
}
}
</script>
上面的代码中,在子组件中定义了一个send方法,该方法通过$emit方法向父组件传递一个字符串类型的消息。父组件中定义了一个receive方法用于接收子组件传递过来的消息,并将消息内容展示在页面中。同时,在父组件中使用v-on指令监听子组件中的send事件,当事件触发时调用receive方法。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Vue实现简单的发表评论功能 - Python技术站