【问题标题】:pass a prop from a v-link in vue.js with vue-router使用 vue-router 从 vue.js 中的 v-link 传递一个道具
【发布时间】:2016-07-11 14:43:03
【问题描述】:

我有一个原型,我正在使用 vue.js 和 vue-router。

import Vue from 'vue'
import VueRouter from 'vue-router'

Vue.use(VueRouter)


let router = new VueRouter

import App from './App.vue'
import Details from './Details.vue'
import Pics from './Pics.vue'

router.map({
  '/details':{
    name: 'details',
    component: Details
  },
  '/pictures':{
    name: 'pics',
    component: Pics
  }
})

router.start(App, '#app')

App.vue 包含我的router-view 安装点。 App 还包含一个Location 组件列表,基于存储在我的共享状态中的位置数据:

App.vue:

<script>
    import state from './state.js'
    import Location from './Location.vue'

    module.exports = {
      components: {Location},
      data: () => {
        return {
          name: 'app',
          locations: state.locations
        }
      }
    }
</script>

<template>
  <div class="app-container">

    <h2 class="heading">Locations</h2>
    <div class="body">
      <div class="column">
        <location v-for="location in locations" :location="location"></location>      
      </div>
      <div class="column">
        <router-view></router-view>      
      </div>
    </div>
  </div>

</template>

state.js:

exports.locations = [
  { name: 'Home', address: '123 main st', pics: [{src: '/images/123.png'}]},
  { name: 'Work', address: '555 Avenue st', pics: [{src: '/images/lol.jpg'}, {src: '/images/wrkn.jpg'}]},
  { name: 'Some Landmark', address: '42 E West st', pics: [{src: '/images/coolpic.jpg'}, {src: '/images/qwerty.jpg'}]}
]

Location.vue 组件包含我用来触发路由器的v-links

Location.vue:

<script>
    module.exports = {
      props:['location'],
      data: () => {
        return {name: 'location'}
      }
    }
</script>

<template>
  <div class="location-container">
    <h3>{{location.name}}</h3>
    <a v-link="{name: 'pics'}">Pics</a>
    <a v-link="{name: 'details'}">Details</a>
  </div>
</template>

当单击特定位置的v-link 时,我希望将给定的位置状态实例作为道具传递给路由器调用的组件(Details.vuePics.vue)。

我遇到的问题是,虽然我知道文档说你可以做到这一点,但他们没有解释如何做到这一点,我也无法弄清楚如何做到这一点。我尝试将位置绑定到App.vue 中的router-view

<router-view :location="location"></router-view>

并将其绑定到router-view 中的占位符:

<router-view>
    <details :location="location"></location>
</router-view>

两者都不起作用。

这样做的正确方法是什么?

我在这里有一个问题的 WebpackBin 演示:http://www.webpackbin.com/4kDRbt28W

【问题讨论】:

    标签: javascript vue.js vue-router


    【解决方案1】:

    对于那些感兴趣的人:我们在 gitter 上找到了答案。

    解决方案是根本不传递对象,而是将其 ID 作为 URL 中的参数传递(例如 /details/1827),然后从组件中的存储中获取该 ID 的对象。

    优点:可以直接从外部来源导航到 URL,并且应用程序状态会很好。

    【讨论】:

      猜你喜欢
      • 2020-12-21
      • 2018-12-17
      • 2017-08-01
      • 2018-04-27
      • 2015-07-18
      • 2020-04-05
      • 2021-07-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多