将道具(数组)传递到路由器链接路径

Posted

技术标签:

【中文标题】将道具(数组)传递到路由器链接路径【英文标题】:Passing props (array) into a router-link path 【发布时间】:2021-05-30 22:28:36 【问题描述】:

我正在尝试根据在其中使用的视图组件动态更新<router-link> 路径。下面是循环通过每个视图组件填充的compItems 数组的<router-link>

<router-link :to=" name: compItem.name, params:  compItems: compItem.router  " class="cz-ds-view-related-comp" v-for="compItem in compItems" :key="compItem.name">
  <div class="related-comp_icon"><img class="related-comp_icon" :src="require('@/assets/home/icons/' + compItem.atomicIcon + '')" ></div>
  <div class="related-comp_title"><h3> compItem.name </h3> <img src="../../assets/home/icons/arrow-right.svg"></div>
</router-link>
export default 
  name: 'relatedSection',
  props: 
      compItems: 
          type: Array
      
  

</script>

以下是定义路由器的视图组件示例。

data () 
  return 
    compItems: [
       name: 'Links', atomicIcon: 'atom.svg', router: 'links', 
       name: 'Form Elements', atomicIcon: 'atom.svg', router: 'form-elements',
       name: 'Avatars', atomicIcon: 'atom.svg', router: 'avatars',
       name: 'Badges', atomicIcon: 'atom.svg',  router: 'badges'
    ]
  

这是我得到的控制台错误。

提前致谢!


编辑:

这是路由器文件的快照:

const routes = [
  path: '/',
  name: 'home',
  props: true,
  component: Home
, 
  path: '/avatars',
  name: 'avatars',
  props: true,
  component: Avatars
, 
  path: '/badges',
  name: 'badges',
  props: true,
  component: Badges
, 
  path: '/buttons',
  name: 'buttons',
  props: true,
  component: Buttons
, 
  path: '/breadcrumbs',
  name: 'breadcrumbs',
  props: true,
  component: Breadcrumbs
, 
  path: '/form-elements',
  name: 'form-elements',
  props: true,
  component: FormElements
, 
  path: '/icons',
  name: 'icons',
  props: true,
  component: Icons
,
 ...

【问题讨论】:

【参考方案1】:

路由器的路由定义都有小写的name属性。当您使用 &lt;router-link&gt; 按名称访问它们时,您需要使用完全匹配,但您的 compItems 具有大写的名称。

此外,您在链接中使用了路由参数,但您的所有路由都没有定义。

为了使代码更清晰和正确,这里进行了重构:

<template v-for="compItem in compItems">
  <router-link :to=" name: compItem.name " class="cz-ds-view-related-comp">
    <div class="related-comp_icon">
      <img class="related-comp_icon" :src="require('@/assets/home/icons/' + compItem.atomicIcon + '')" >
    </div>
    <div class="related-comp_title">
      <h3> compItem.title </h3>
      <img src="../../assets/home/icons/arrow-right.svg">
    </div>
  </router-link>
</template>
data () 
  return 
    compItems: [
       title: 'Links', atomicIcon: 'atom.svg', name: 'links', 
       title: 'Form Elements', atomicIcon: 'atom.svg', name: 'form-elements',
       title: 'Avatars', atomicIcon: 'atom.svg', name: 'avatars',
       title: 'Badges', atomicIcon: 'atom.svg',  name: 'badges'
    ]
  

【讨论】:

以上是关于将道具(数组)传递到路由器链接路径的主要内容,如果未能解决你的问题,请参考以下文章

在 reactJS 中从反应路由器链接传递道具

将道具传递给路由器内部的组件

通过路由器链接传递道具

如何使用 vue 路由器将道具传递到 nuxt 错误页面?

使用按钮上的道具路由到新组件单击反应

如何通过链接和路由传递道具/状态 - react.js