可以从列表页面上的 api 中的辅助表获取变量,但不能在单个项目页面上

Posted

技术标签:

【中文标题】可以从列表页面上的 api 中的辅助表获取变量,但不能在单个项目页面上【英文标题】:Can get variable from secondary table in api on a list page, but not on single item page 【发布时间】:2022-01-14 10:15:57 【问题描述】:

从 API 读取和显示完整表格的页面运行良好;

<template>
    <b-col>
        <h2>    
            Enrolments
            <b-button :to=" name: 'createEnrolment', params:  id: this.$route.params" variant="warning" class="float-right">Create</b-button>
        </h2>

        <b-card
            v-for="enrolment in enrolments"
            :key="enrolment._id"
        >
            <p>Course id: enrolment.course.id </p>
            <p>Course title: enrolment.course.title </p>    
            <p>Status: enrolment.status </p>
            <p>Created: enrolment.created_at </p>
            <p>Date: enrolment.date </p>
            <p>Lecturer: enrolment.lecturer.name </p>
            <p>Lecturer email: enrolment.lecturer.email </p>
            <p>Updated: enrolment.updated_at </p>
            <p>Time: enrolment.time </p>
            <b-button :to=" name: 'viewEnrolment', params:  id: enrolment.id" variant="warning">View</b-button>
        </b-card>
    </b-col>
</template>

<script>
import axios from '@/config'

export default 
    name: "viewEnrolments",
    components: ,    
    data()
        return 
            enrolments: []
        
    ,
    mounted() 
        this.getData()
    ,
    methods: 
        getData() 
            let token = localStorage.getItem('token')

            axios
            .get(`/enrolments`, 
            
                headers: 
                    "Accepted": `application/json`, 
                    "Authorization": `Bearer $token`
                
            )          
            .then(response => 
                console.log(response.data)
                this.enrolments = response.data.data
            )
            .catch(error => console.log(error))
        
    

</script>

但是,当我尝试仅查看注册表中的一个条目时,它无法识别或从课程表中获取该数据,从而出现错误: “TypeError: Cannot read properties of undefined (reading 'id')”,来自第 8 行:&lt;p&gt;Course id: enrolment.course.id &lt;/p&gt;

<template>
    <b-col>
        <h2>    
            Enrolments
        </h2>

        <b-card>
            <p>Course id: enrolment.course.id </p>
            <p>Course title: enrolment.course.title </p>    
            <p>Status: enrolment.status </p>
            <p>Created: enrolment.created_at </p>
            <p>Date: enrolment.date </p>
            <p>Lecturer: enrolment.lecturer.name </p>
            <p>Lecturer email: enrolment.lecturer.email </p>
            <p>Updated: enrolment.updated_at </p>
            <p>Time: enrolment.time </p>
        </b-card>
    </b-col>
</template>

<script>
import axios from '@/config'

export default 
    name: "viewEnrolment",
    components: ,    
    data()
        return 
            enrolment: []
        
    ,
    mounted() 
        this.getData()
    ,
    methods: 
        getData() 
            let token = localStorage.getItem('token')
            
            axios
            .get(`/enrolments/$this.$route.params.id`, 
            
                headers: 
                    "Accepted": `application/json`, 
                    "Authorization": `Bearer $token`
                
            )          
            .then(response => 
                console.log(response.data)
                this.enrolments = response.data.data
            )
            .catch(error => console.log(error))
        ,
    

</script>

我尝试了几种不同的方法将课程表链接到注册表,但没有任何效果。但我什至不明白第一个允许我参考课程表的内容,但第二个不明白。

【问题讨论】:

【参考方案1】:

我认为您可能在第二个组件viewEnrolment 中拼错了您的变量。您有复数 enrollments

  this.enrolments = response.data.data

但在您的 html 组件中,您使用的是单数 enrollment

<p>Course id: enrolment.course.id </p>

另外,这只是一个额外的花絮:在 Vue 组件中,我通常会尝试在 created() hook 中调用 API,而不是 mounted() 钩子。 created() 出现在之前,并在设置数据观察时调用,但 之前 组件实际上已挂载到 HTML

这可以防止在尝试在 HTML 中使用 this.enrolment 时出现奇怪的问题,因为 API 请求尚未完成,它实际上还不可用。

【讨论】:

就是这样,一个愚蠢的错误,谢谢。

以上是关于可以从列表页面上的 api 中的辅助表获取变量,但不能在单个项目页面上的主要内容,如果未能解决你的问题,请参考以下文章

从 osx 中的任何应用程序获取选定文本的辅助功能 API 替代方案

从 Prisma2 中的辅助表中获取数据

将下拉列表中的值从一个 php 传递到另一个

在 Laravel 的页面上应用过滤器后获取表格上的数据

分页库 - 网络 + db 的边界回调,API 获取页面和大小

如何从 UserControl 访问 WPF 页面中的公共变量?