使用vue尝试使用v-model、v-if与v-for的知识,制作一个简易贴吧。有普通用户和管理员两种角色,普通用户可以发帖、收藏帖子;管理员可以发帖、置顶帖子。请给出代码
时间: 2024-05-14 19:16:47 浏览: 74
好的,以下是使用vue制作简易贴吧的示例代码:
HTML代码:
```
<div id="app">
<h1>简易贴吧</h1>
<div v-if="role === 'user'">
<h2>发帖</h2>
<form @submit.prevent="addPost">
<label for="title">标题:</label>
<input type="text" id="title" v-model="newPost.title" required><br><br>
<label for="content">内容:</label>
<textarea id="content" v-model="newPost.content" required></textarea><br><br>
<button type="submit">发布</button>
</form>
<h2>收藏的帖子</h2>
<ul>
<li v-for="(post, index) in posts" v-if="favorites.includes(index)">
<h3>{{ post.title }}</h3>
<p>{{ post.content }}</p>
<button @click="removeFavorite(index)">取消收藏</button>
</li>
</ul>
</div>
<div v-if="role === 'admin'">
<h2>发帖</h2>
<form @submit.prevent="addPost">
<label for="title">标题:</label>
<input type="text" id="title" v-model="newPost.title" required><br><br>
<label for="content">内容:</label>
<textarea id="content" v-model="newPost.content" required></textarea><br><br>
<button type="submit">发布</button>
</form>
<h2>置顶帖子</h2>
<ul>
<li v-for="(post, index) in posts">
<h3>{{ post.title }}</h3>
<p>{{ post.content }}</p>
<button v-if="!post.isPinned" @click="pinPost(index)">置顶</button>
<button v-if="post.isPinned" @click="unpinPost(index)">取消置顶</button>
</li>
</ul>
</div>
</div>
```
JS代码:
```
new Vue({
el: '#app',
data: {
role: 'user',
newPost: {
title: '',
content: ''
},
posts: [
{ title: '这是第一篇帖子', content: '这是第一篇帖子的内容', isPinned: false },
{ title: '这是第二篇帖子', content: '这是第二篇帖子的内容', isPinned: false },
{ title: '这是第三篇帖子', content: '这是第三篇帖子的内容', isPinned: true },
{ title: '这是第四篇帖子', content: '这是第四篇帖子的内容', isPinned: false }
],
favorites: []
},
methods: {
addPost() {
if (this.newPost.title && this.newPost.content) {
this.posts.push({
title: this.newPost.title,
content: this.newPost.content,
isPinned: false
});
this.newPost.title = '';
this.newPost.content = '';
}
},
pinPost(index) {
this.posts[index].isPinned = true;
},
unpinPost(index) {
this.posts[index].isPinned = false;
},
addFavorite(index) {
if (!this.favorites.includes(index)) {
this.favorites.push(index);
}
},
removeFavorite(index) {
this.favorites.splice(this.favorites.indexOf(index), 1);
}
}
});
```
上面的代码实现了简易贴吧的功能:普通用户可以发帖、收藏帖子,管理员可以发帖、置顶帖子。在HTML代码中,根据角色的不同,展示不同的内容,使用`v-if`控制。在JS代码中,使用`data`定义了角色、新建帖子、所有帖子、收藏的帖子等变量,在`methods`中定义了添加帖子、置顶帖子、收藏帖子、取消收藏帖子等方法,通过`v-model`和`v-for`等指令将数据绑定到HTML页面上,实现了简易贴吧的功能。
阅读全文