如何通过 Props 提取路由参数
How to extract Route Params via Props
我正在学习 VueJs 并试图了解如何通过 props
提取 route
params
。
我正在查看以下文档,其中似乎有三个选项可以完成此操作,但到目前为止我还不能很好地理解它 - https://github.com/vuejs/vue-router/tree/dev/examples/route-props
.
我已经尝试将 props: true
添加到我的 router
对象数组(routes.js 文件 post 编辑在下面)也没有成功。
由于这是 vue-cli
研究项目,我将 post 单独的相关代码块以尝试正确说明这一点。
主要 - App.vue 下面:
<template>
<div class="container">
<div class="row">
<div class="col-xs-12 col-sm-8 col-sm-offset-2 col-md-6 col-md-offset-3">
<h1>Routing</h1>
<hr>
<app-header></app-header>
<router-view></router-view>
</div>
</div>
</div>
</template>
<script>
import Header from './components/Header.vue'
export default {
components: {
appHeader: Header
}
}
</script>
<style>
</style>
组件 - Header.vue 下面:
<template>
<ul class="nav nav-pills">
<router-link to="/" tag="li" active-class="active" exact><a>Home</a></router-link>
<router-link to="/user/10" tag="li" active-class="active"><a>User 1</a></router-link>
<router-link to="/user/5" tag="li" active-class="active"><a>User 2</a></router-link>
</ul>
</template>
组件 - User.vue 下面:
<template>
<div>
<h1>The User Page</h1>
<hr>
<br>
<p>Route ID: {{id}}</p>
<button class="btn btn-primary" @click="goHome">Go to Home</button>
</div>
</template>
<script>
export default {
data(){
return {
id: this.$route.params.id
}
},
watch: {
'$route'(to, from) {
this.id = to.params.id;
}
},
methods: {
goHome(){
this.$router.push('/')
}
}
}
</script>
main.js 下面:
import Vue from 'vue'
import VueRouter from 'vue-router'
import App from './App.vue'
import {routes} from "./routes";
Vue.use(VueRouter)
export const router = new VueRouter({
routes,
mode: 'history'
})
new Vue({
el: '#app',
router,
render: h => h(App)
})
routes.js 下面(位于 SRC 文件夹):
import User from './components/user/User.vue'
import Home from './components/Home.vue'
export const routes = [
{path: '', component: Home},
{path: '/user/:id', component: User}
]
我是否还需要在 User.vue
组件上设置 Props
才能使其工作并退出使用 watch
?
换句话说,我希望看到我的用户路由在 <p>Route ID: {{id}}</p>
从这个硬编码 10
到 5
使用我无法理解的新方法被监听,在顶这个post.
任何人都可以在这种特定情况下指导我解决这个问题吗?
在此先感谢大家。
根据 passing Props to Route components 上的文档,您可以使用路由器配置中的 props
选项将其解耦。
import User from './components/user/User.vue'
import Home from './components/Home.vue'
export const routes = [
{path: '', component: Home},
{path: '/user/:id', component: User, props: true}
]
<template>
<div>
<h1>The User Page</h1>
<hr>
<br>
<p>Route ID: {{id}}</p>
<button class="btn btn-primary" @click="goHome">Go to Home</button>
</div>
</template>
<script>
export default {
props: ['id'],
methods: {
goHome() {
this.$router.push('/')
}
}
}
</script>
我正在学习 VueJs 并试图了解如何通过 props
提取 route
params
。
我正在查看以下文档,其中似乎有三个选项可以完成此操作,但到目前为止我还不能很好地理解它 - https://github.com/vuejs/vue-router/tree/dev/examples/route-props
.
我已经尝试将 props: true
添加到我的 router
对象数组(routes.js 文件 post 编辑在下面)也没有成功。
由于这是 vue-cli
研究项目,我将 post 单独的相关代码块以尝试正确说明这一点。
主要 - App.vue 下面:
<template>
<div class="container">
<div class="row">
<div class="col-xs-12 col-sm-8 col-sm-offset-2 col-md-6 col-md-offset-3">
<h1>Routing</h1>
<hr>
<app-header></app-header>
<router-view></router-view>
</div>
</div>
</div>
</template>
<script>
import Header from './components/Header.vue'
export default {
components: {
appHeader: Header
}
}
</script>
<style>
</style>
组件 - Header.vue 下面:
<template>
<ul class="nav nav-pills">
<router-link to="/" tag="li" active-class="active" exact><a>Home</a></router-link>
<router-link to="/user/10" tag="li" active-class="active"><a>User 1</a></router-link>
<router-link to="/user/5" tag="li" active-class="active"><a>User 2</a></router-link>
</ul>
</template>
组件 - User.vue 下面:
<template>
<div>
<h1>The User Page</h1>
<hr>
<br>
<p>Route ID: {{id}}</p>
<button class="btn btn-primary" @click="goHome">Go to Home</button>
</div>
</template>
<script>
export default {
data(){
return {
id: this.$route.params.id
}
},
watch: {
'$route'(to, from) {
this.id = to.params.id;
}
},
methods: {
goHome(){
this.$router.push('/')
}
}
}
</script>
main.js 下面:
import Vue from 'vue'
import VueRouter from 'vue-router'
import App from './App.vue'
import {routes} from "./routes";
Vue.use(VueRouter)
export const router = new VueRouter({
routes,
mode: 'history'
})
new Vue({
el: '#app',
router,
render: h => h(App)
})
routes.js 下面(位于 SRC 文件夹):
import User from './components/user/User.vue'
import Home from './components/Home.vue'
export const routes = [
{path: '', component: Home},
{path: '/user/:id', component: User}
]
我是否还需要在 User.vue
组件上设置 Props
才能使其工作并退出使用 watch
?
换句话说,我希望看到我的用户路由在 <p>Route ID: {{id}}</p>
从这个硬编码 10
到 5
使用我无法理解的新方法被监听,在顶这个post.
任何人都可以在这种特定情况下指导我解决这个问题吗?
在此先感谢大家。
根据 passing Props to Route components 上的文档,您可以使用路由器配置中的 props
选项将其解耦。
import User from './components/user/User.vue'
import Home from './components/Home.vue'
export const routes = [
{path: '', component: Home},
{path: '/user/:id', component: User, props: true}
]
<template>
<div>
<h1>The User Page</h1>
<hr>
<br>
<p>Route ID: {{id}}</p>
<button class="btn btn-primary" @click="goHome">Go to Home</button>
</div>
</template>
<script>
export default {
props: ['id'],
methods: {
goHome() {
this.$router.push('/')
}
}
}
</script>