将动态数据传递给 Vue params/routes

Passing dynamic data to Vue params/routes

我是 Vue 的新手,正在努力让一些东西发挥作用。不完全确定这是否可能,但我会问,我们会看到 Stack Overflow 的神灵必须召唤什么。

我想知道是否可以在默认导出的数据 () 部分中为大量 ID 存储组件 data/props。

所以 {{$route.params.id}} 设法从 url 的末尾捕获 ID,但我想知道我是否可以拥有视图 return存储在组件某处的其他数据。所以基本上我是否可以在 Project.Vue 文件中存储 5 个不同 ID 的数据,或者我只需要制作 5 个不同的文件(Project1.Vue、Project2.Vue 等)然后将它们全部设置为单独的路线?

到目前为止,我已经尝试向数据 () 元素添加位,例如

    data () {
        return {
            msg: 'Projects',
            id: [{ 1: 'hi'}, {2: 'hey'}],
            two: 'project two',
            three: 'project three',
        }
    }

然后在 <template> 中引用 id 但这不起作用,因为它只是 return 编辑了整个对象。我也尝试过这里提到的解耦:https://router.vuejs.org/en/essentials/passing-props.html 但对此也不满意。

对于我糟糕的解释表示歉意,但我希望有人可以帮助阐明这是否可能。下面使用的代码:

index.js

import Vue from 'vue'
import Router from 'vue-router'
import Home from '@/components/Home'
import Contact from '@/components/Contact'
import About from '@/components/About'
import Projects from '@/components/Projects'


Vue.use(Router)

export default new Router({
  routes: [
    {
        path: '/',
        name: 'Home',
        component: Home
    },

    {
        path: '/contact',
        name: 'Contact',
        component: Contact
    },

    {
        path: '/about',
        name: 'About',
        component: About
    },

    {
        path: '/projects',
        name: 'Projects',
        component: Projects
    },

    {
        path: '/projects/:id',
        name: 'Projects',
        component: Projects,
        props: {default: true}
    },

  ]
})

Projects.Vue

<template>
    <div id="projects">
    <h1>{{ header }} {{ $route.params.id }}</h1>
        {{id}}
    </div>
</template>



<script>
    export default {
        name: 'Projects',
        watch: {
            '$route'(to, from) {
                // react to route changes...
            }
        },
        data () {
            return {
                header: 'Projects',
            }
        }
    }
</script>


<style scoped>
</style>

我已经弄明白了。

为了根据传入的id动态传递数据到url,你需要创建一个数据对象,然后在<template>的里面,你可以传入您创建的对象,然后将 $route.params.id 传递到方括号内。但是,值得注意的是,因为在 data() 中创建的对象将使用零索引,所以值得在模板中添加 -1。请参阅以下代码以了解其工作原理:

<template>
    <div id="projects">
    <h1>{{ msg }} {{ projects[$route.params.id - 1] }}</h1>
    </div>
</template>



<script>
    export default {
        name: 'Projects',
        watch: {
            '$route'(to, from) {
                // react to route changes...
            }
        },
        data () {
            return {
                projects: [
                    {   id: 1,
                        name: 'Project numero uno'
                    },
                    {   id: 2,
                        name: 'Project secundo'
                    },
                    {   id: 3,
                        name: 'Project three'
                    },
                ]
            }
        }
    }
</script>


<style scoped>
</style>