Vuejs 3 + Axios + Express -显示来自数组/对象的数据

o2gm4chl  于 2022-11-05  发布在  iOS
关注(0)|答案(1)|浏览(130)

我正在尝试使用Vue从Express API输出单个帖子。
问题是返回的对象/数组(post.value)没有显示我在模板中声明的值(post.title和post.body)。
任何帮助都将不胜感激。

<template>
<div v-if="post">
    <h2>{{ post.title }}</h2>
    <p>{{ post.body }}</p>
</div>
</template>

<script>
import axios from 'axios'
import { ref } from 'vue'
import { useRoute } from 'vue-router'

export default {
    name: 'BlogPostView',
    setup() {
        const post = ref([])
        const route = useRoute()
        const error = ref('')

        const load = async (id) => {

            try {
                await axios.get(`http://localhost:5000/api/posts/${id}`)
                    .then((response) => {
                        post.value = response.data
                        console.log(post.value)
                        console.log(response.data)   
                    })
            } catch(err) {
                error.value = err.message
            }            
        }

        load(route.params.id)

        return { post, error }
    }
}
</script>

仅供参考:

console.log(params.value)没有得到任何错误,并输出以下内容:

Proxy {0: {…}}[[Handler]]: Object[[Target]]: Array(1)[[IsRevoked]]: false

UPDATE我可以输出变量,但是需要v-for循环的帮助。只是想知道是否有另一种不使用循环的输出方式。我可以使用Vue + firebase使它工作,但是不能在这个堆栈上。

3pmvbmvn

3pmvbmvn1#

由于您的API返回一个包含一个post的数组,因此您可以只存储post,而不存储其周围的数组。

<template>
<div v-if="post">
    <h2>{{ post.title }}</h2>
    <p>{{ post.body }}</p>
</div>
</template>

<script>
import axios from 'axios'
import { ref } from 'vue'
import { useRoute } from 'vue-router'

export default {
    name: 'BlogPostView',
    setup() {
        const post = ref({}) // make this an object
        const route = useRoute()
        const error = ref('')

        const load = async (id) => {

            try {
                const response = await axios.get(`http://localhost:5000/api/posts/${id}`)
                post.value = response.data[0] // Get the first item from the array
                console.log(post.value)
                console.log(response.data) 
            } catch(err) {
                error.value = err.message
            }            
        }

        load(route.params.id)

        return { post, error }
    }
}
</script>

相关问题