使用 vue-router 从 vue.js 中的 v-link 传递一个道具
pass a prop from a v-link in vue.js with vue-router
我有一个正在使用 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
安装点。应用程序还包含一个 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
被点击。
我遇到的问题是,虽然我知道文档说您可以执行此操作,但他们没有解释如何执行此操作,而且我一直无法弄清楚如何操作。我尝试将位置绑定到 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
对于那些感兴趣的人:我们在 gitter 上弄明白了。
解决方案是根本不传递对象,而是将其 ID 作为参数传递到 URL(例如 /details/1827
),然后从存储中获取该 ID 的对象组件。
优点:URL可以直接从外部源导航到应用程序状态。
我有一个正在使用 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
安装点。应用程序还包含一个 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
被点击。
我遇到的问题是,虽然我知道文档说您可以执行此操作,但他们没有解释如何执行此操作,而且我一直无法弄清楚如何操作。我尝试将位置绑定到 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
对于那些感兴趣的人:我们在 gitter 上弄明白了。
解决方案是根本不传递对象,而是将其 ID 作为参数传递到 URL(例如 /details/1827
),然后从存储中获取该 ID 的对象组件。
优点:URL可以直接从外部源导航到应用程序状态。