【问题标题】:<router-link> and JSON questions using Vue.js and Vue Router<router-link> 和 JSON 问题使用 Vue.js 和 Vue Router
【发布时间】:2020-04-05 09:23:28
【问题描述】:

我正在使用 Vue CLI 3 创建我的设计组合。我正在使用 &lt;router-view&gt;&lt;router-link&gt; 导航到我的不同组件。我的网站架构非常简单。我有一个主页、关于页面、工作页面和几个单独的项目页面:

  • 首页
    • 关于
    • 工作
      • 项目
      • 项目
      • 项目

工作页面由几个链接组成,这些链接可以点击进入各个项目页面。工作组件是这样设置的:

<template>
  <div>
    <projectLink v-for="data in projectLinkJson" />
  </div>
</template>

<script>
import projectLink from '@/components/projectLink.vue'
import json from '@/json/projectLink.json'

export default {
  name: 'work',
  data(){
    return{
      projectLinkJson: json
    }
  },
  components: {
    projectLink
  }
}
</script>

如您所见,我正在导入 JSON 以动态呈现内容。 projectLink 组件是这样的:

<template>
  <router-link to='/project'>
    <div class="projectLink" v-bind:class="type">
      <h1>{{ title }}</h1>
    </div>
  </router-link>
</template>

<script>
export default {
  name: 'projectLink',
  props: {
    title: String,
    type: String
  }
}
</script>

在上面的组件中,您可以看到我将&lt;router-link&gt; 设置为“/project”。在我的routes.js 文件中,我只是告诉这条路线转到我的项目页面组件。我想使用项目页面组件作为我每个单独项目页面的框架。但是我如何动态地做到这一点?如何为每个项目路由到相同的组件,但更改每个单独项目页面的内容?我可以像在工作组件中那样使用 JSON 来执行此操作吗?

我的猜测是我可以更改&lt;router-link&gt; 来给它一个URL 查询。然后根据不断变化的 URL 查询提供数据

<router-link :to="{ path: 'project', query: { url }}">

【问题讨论】:

    标签: json vue.js vue-component vue-router vue-cli-3


    【解决方案1】:

    我会像这样创建一个路由器链接:

    <router-link :to="{ name: 'projectDetails', params: { name: projectName }}">
    

    我会在 params 对象中传递某种类型的项目标识符。在此示例中,我使用的是名称,但 id 可能更适合您的情况。我建议使用“命名”路由,这样您以后可以更轻松地更改 url。

    然后我会创建一个 ProjectDetails.vue 页面。

    我会像这样在您的路由器文件中输入一个条目:

    {
        path: "/project/:name",
        name: "projectDetails",
        props: true,
        component: () =>
          import(/* webpackChunkName: "ProjectDetails"*/ "../views/ProjectDetails")
    },
    

    【讨论】:

    • 凯尔,原谅我什么都不知道哈。底部引用 webpackChunkName 的导入行是什么?除了那部分,我理解你回答中的所有内容。谢谢!
    • 将组件定义为箭头函数允许组件被浏览器延迟加载。 webpackChunkName 告诉 webpack 什么叫这个“块”代码。如果你不使用 webpackChunkName 注释,那么 webpack 会给它一个不太友好的名字。
    • 这对我有用。我的 URL 现在正在使用 JSON 填充 /project/'name'。很抱歉问了这么多问题,但是我现在如何根据“名称”值将 JSON 数据动态输入到新的组件字段中。快到了!!
    • 嘿凯尔,只是在这里跟进,想知道你是否有解决方案?任何时候都非常感谢。
    • 在 ProjectDetails.vue 组件中,您可以通过项目名称(或 ID)查找项目的详细信息。通常,您会在创建的生命周期函数中执行此操作。