Javascript 另一方面,使用vuejs 3和firebase不会显示帖子的标签标题和内容
我不熟悉Javascript 另一方面,使用vuejs 3和firebase不会显示帖子的标签标题和内容,javascript,vue.js,vuejs3,Javascript,Vue.js,Vuejs3,我不熟悉vuejs 3,我使用了vuejs 3和firebase,我创建了一个posts.vue组件和一个OnePost.vue组件,该组件显示posts,以及getPosts.js,该组件允许检索posts,和显示每个帖子的详细信息的show.vue,以及允许您检索单个帖子的详细信息的getOnePost.js,这里的问题是span中帖子的标签当我写{{post.tags}}时显示,它显示如下[“前端”、“后端”、“完整堆栈”] 视图/帖子.vue <template lang=&quo
vuejs 3
,我使用了vuejs 3
和firebase
,我创建了一个posts.vue
组件和一个OnePost.vue
组件,该组件显示posts
,以及getPosts.js
,该组件允许检索posts
,和显示每个帖子的详细信息的show.vue
,以及允许您检索单个帖子的详细信息的getOnePost.js
,这里的问题是span
中帖子的标签
当我写{{post.tags}}
时显示,它显示如下[“前端”、“后端”、“完整堆栈”]
视图/帖子.vue
<template lang="">
<h1>list of posts</h1>
<div class="row">
<div class="col-md-6" v-for="post in posts" :key="post.id">
<OnePost :post="post"/>
</div>
</div>
</template>
<script>
import OnePost from '../components/OnePost'
import loadPosts from './../composables/posts/getPosts'
export default {
components: { OnePost },
setup() {
const { posts,error,load } = loadPosts();
load();
return { posts }
}
}
</script>
<template lang="">
<h2 @click="show = !show">{{ post.title }}</h2>
<div v-if="show">
<div class="well">
<p>{{ extract }}</p>
<p>{{ post.tags }}</p>
<div class="well">
<span v-for="tag in post.tags" class="badge badge-primary mr-2">
#{{ tag }}
</span>
</div>
<div class="my-3">
<router-link :to="{ name: 'Show-post',params:{id: post.id} }" class="btn btn-sm btn-info">
Show
</router-link>
<button class="btn btn-sm btn-warning ml-2">Edit</button>
<button class="btn btn-sm btn-danger ml-2">Delete</button>
</div>
</div>
</div>
</template>
<script>
import { computed, ref } from 'vue'
export default {
props: ['post'],
setup(props){
const show = ref(true)
const extract = computed(() => props.post.content.substring(0, 50) + '...')
return { extract, show }
}
}
</script>
<template lang="">
<div>
<h1>{{ post.title }}</h1>
<p>{{ post.content }}</p>
</div>
</template>
<script>
import { useRoute } from 'vue-router'
import getOnePost from './../composables/posts/getOnePost.js'
export default {
setup() {
const route = useRoute();
const { post,error,load } = getOnePost();
const id = route.params.id;
load(id)
return { post }
}
}
</script>
show.vue
<template lang="">
<h1>list of posts</h1>
<div class="row">
<div class="col-md-6" v-for="post in posts" :key="post.id">
<OnePost :post="post"/>
</div>
</div>
</template>
<script>
import OnePost from '../components/OnePost'
import loadPosts from './../composables/posts/getPosts'
export default {
components: { OnePost },
setup() {
const { posts,error,load } = loadPosts();
load();
return { posts }
}
}
</script>
<template lang="">
<h2 @click="show = !show">{{ post.title }}</h2>
<div v-if="show">
<div class="well">
<p>{{ extract }}</p>
<p>{{ post.tags }}</p>
<div class="well">
<span v-for="tag in post.tags" class="badge badge-primary mr-2">
#{{ tag }}
</span>
</div>
<div class="my-3">
<router-link :to="{ name: 'Show-post',params:{id: post.id} }" class="btn btn-sm btn-info">
Show
</router-link>
<button class="btn btn-sm btn-warning ml-2">Edit</button>
<button class="btn btn-sm btn-danger ml-2">Delete</button>
</div>
</div>
</div>
</template>
<script>
import { computed, ref } from 'vue'
export default {
props: ['post'],
setup(props){
const show = ref(true)
const extract = computed(() => props.post.content.substring(0, 50) + '...')
return { extract, show }
}
}
</script>
<template lang="">
<div>
<h1>{{ post.title }}</h1>
<p>{{ post.content }}</p>
</div>
</template>
<script>
import { useRoute } from 'vue-router'
import getOnePost from './../composables/posts/getOnePost.js'
export default {
setup() {
const route = useRoute();
const { post,error,load } = getOnePost();
const id = route.params.id;
load(id)
return { post }
}
}
</script>
由于post是异步获取的,因此在第一次渲染时将未定义post.tags
,要解决此问题,必须使用条件渲染检查属性是否可用v-if=“post.tags”
:
#{{tag}}