【vue】Vue Router路由组件传参的几种方式

在组件中使用 $route 会使之与其对应路由形成高度耦合,从而使组件只能在某些特定的 URL 上使用,限制了其灵活性。通过props将组件和路由解耦,使得该组件更易于重用和测试

 我们都知道,vue中父组件和子组件之间可以通过props传递数据。同样的,在路由中,也可以把路由上的参数传递给组件,具体有三种方式:1)布尔模式; 2)对象模式;3)函数模式。

1.布尔模式

router->index.js

 { path: '/hello/:name', component: Hello, props: true }, 

App.vue

<button><router-link to="/hello/you">hello/you</router-link></button>

 

结果:Helloyou【Hello {{name}}】

2.对象模式

router->index.js

 { path: '/static', component: Hello, props: { name: 'world' }}, 

App.vue

<button><router-link to="/static">static</router-link></button>

结果:Helloworld【Hello {{name}}】

3.函数模式

router->index.js

 { path: '/dynamic/:years', component: Hello, props: dynamicPropsFn },

App.vue

	<button><router-link to="/dynamic/1">dynamic/1</router-link></button>

结果:Hello2021!【Hello {{name}}】

router->index.js部分代码

function dynamicPropsFn (route) {
  const now = new Date()
  return {
    name: (now.getFullYear() + parseInt(route.params.years)) + '!'
  }
}

const routes = [
    { path: '/', component: Hello }, 
    { path: '/hello/:name', component: Hello, props: true }, 
    { path: '/static', component: Hello, props: { name: 'world' }}, 
    { path: '/dynamic/:years', component: Hello, props: dynamicPropsFn },
]

 App.vue部分代码

<template>
	<div id="app">
		<div>
			<button><router-link to="/">/</router-link></button>
			<button><router-link to="/hello/you">hello/you</router-link></button>
			<button><router-link to="/static">static</router-link></button>
			<button><router-link to="/dynamic/1">dynamic/1</router-link></button>
		</div>
		<router-view></router-view>
	</div>
</template>

Hello.vue(三种模式共用) 

<template>
	<div>
		<h1>Hello{{name}}</h1>
	</div>

</template>

<script>
	export default{
	 props: {
	    name: {
	      type: String,
	      default: 'Vue!' //默认值
	    }
	  }
	}
</script>

<style>
</style>

官方完整例子:https://github.com/vuejs/vue-router/tree/dev/examples/route-props

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值