【问题标题】:How to bind a variable prop to a v-for slot如何将变量 prop 绑定到 v-for 插槽
【发布时间】:2020-01-01 10:32:54
【问题描述】:

我正在尝试创建一个列表组件,它呈现一个路由器链接列表,其中每个路由器链接都有一个作用域插槽。 router-link 的 to-prop 应该由 parent 配置。

父组件应该可以配置router-link的to-prop,而不必自己实现router-link。或者如果它必须自己实现路由链接,列表组件应该能够将类传递给每个路由链接。

我创建了一个代码笔来显示我想要解决的问题。当然,如果您对此有任何疑问或有任何不清楚的地方,请告诉我。 https://codepen.io/Buffalom/pen/KKPmJPx

这是我想要达到的目标的总结:

<router-link v-for="item in items" to="/" class="abc">
    <!-- :to should be configurable by the parent -->
    <slot :item="item"></slot>
</router-link>

我希望父级能够呈现具有给定项目数组的列表,但将每个路由器链接配置为自身。

更新

我想在父组件中采用这样的理想方式:

<List :items="items" :to="`/1/${item.name}`">
    ...

作为 to-prop 中的项目,items 中的每个项目都将用于列表组件本身的 v-for router-link。有点像反向作用域插槽...^^

【问题讨论】:

  • to属性动态数据从哪里来,是在items数组中吗?
  • @ambianBeing 我想这将是一个放在父组件上的路径字符串,由 items 数组的每个单独项目的子字符串和数据组成。例如。 "/1/${当前项的名称}"

标签: javascript vue.js vue-router


【解决方案1】:

这就是你要找的吗?您只需要将to 设为动态道具。

<router-link v-for="item in items" :to="item.url" class="abc">
    <!-- :to should be configurable by the parent -->
    <slot :item="item"></slot>
</router-link>

更新

如果您没有网址,请查看vue-router named routes。取自文档并稍作改编:

const router = new VueRouter({
  routes: [
    {
      path: '/1/:itemName',
      name: 'item',
      component: MyItemPage
    }
  ]
})

<router-link
    v-for="item in items"
    :to="{ name: 'item', params: { itemName: item.name }}"
    class="abc"
>
    <slot :item="item"></slot>
</router-link>

【讨论】:

  • 确实如此,我可以为项目添加一个 url 道具。我更愿意以其他方式进行操作,例如将模板字符串传递给列表组件,然后将其用作 url,但我想现在就可以了。谢谢!
  • @Tom 如果没有您的路由器配置,很难给出完整的答案。如果您没有直接的网址,您也可以查看router.vuejs.org/guide/essentials/named-routes.html。此外,如果这个或任何答案解决了您的问题,请点击复选标记考虑accepting it
  • 我添加了一个更新,解释了我希望能够做什么。我实际上正在使用nuxt,只是认为它不值得注意,因为它与nuxt没有任何关系。
  • 感谢您的更新。正如您在代码笔中看到的那样,我想使用来自不同父母的列表组件,它应该能够配置完全不同的路线。所以在component1中我想用items1实现列表组件,每个项目都应该链接到'/1/${item.name}',而在component2中我想使用items2,每个项目应该链接到'/2/$ {项目名称}'。不仅项目名称不同,整个路线也应该不同。
  • @Tom 在这种情况下,您可以定义多个具有不同名称的路由,并使用可配置的路由名称代替我使用的静态字符串 'item'
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-02
  • 2020-06-04
  • 1970-01-01
  • 2017-06-26
  • 1970-01-01
相关资源
最近更新 更多