vue路由中如何添加变量
在本文中,我们将探讨如何vue路由中如何添加变量,并介绍如何应对vue引入路由插件的常见问题。
本文内容目录一览:
- 1、Vue路由进阶
- 2、vue-router 在每个路由进入前添加参数
- 3、Vue 路由传值的几种方法
- 4、vue router怎样往路由中添加
- 5、vue使用require.context,动态变量怎么办
- 6、vue中路由传参的三种基本方式
Vue路由进阶
路由配置:
: 号后面接参数名(动态路径名)
配置好路由后, /login/12 或 /login/hyh 都能访问到Login页面。
获取传参:
$route.params.参数名
路由组件传参:
在路由配置里,设置 props: true
组件:
query传参
路径将会解析成: /login?id=123 ,类似Get请求。
使用 children 给路径添加子路径。形成嵌套路由,父路由可以只渲染一个 router-view ,但必须有一个 router-view ,子路由将渲染在父路由的 router-view 里。
父路由可以为单独的router-view:
历史:
可以将一个路径地址重定向另一个地址:
访问根目录将会跳转到主页(home),404页面就是靠重定向做的:
设置name属性,可以在router-link内使用name代替path
导航守卫就是孙饥一个路径跳转的监哗凯侍听过滤器。
第三个参数next
每一个 next 都是会严格执行的,只要守卫函数内还有 next ,就会依次执行。
可以在路由上添加 meta 字段:
获取meta值:乱吵
按需加载、动态导入
vue-router 在每个路由进入前添加参数
族知 在vue-router的钩子函数beforeEach函数中有三个参数to,from,next,因为不能直接操作to.query,所以直接修改query的做法gg,但是to.meta是可以随意旋转跳跃的,嗯~灵感来了。
大体想法是给meta里边一个标志来表示是否已经添加了想添加的斗粗字段,那就叫youKnowWho吧,首先设置to.meta.youKnowWho = false,在beforeEach开始时判断youKnowWho,为false时进空穗镇行操作,废话少说,上酸菜
router.beforeEach((to, from, next) = {
if (!to.meta.youKnowWho ) { // 说明没有进行操作
to.meta.youKnowWho= true // 一定要写,不然烫烫烫到怀疑人生
let newTo = { ...to } // 不要直接to.query = 什么鬼,先克隆出来
newTo.query.something= something // 做自己想做的事,这里只以query为例
next(newTo) // 重新跳转路由,这时候想干的事已经干完了,并且不会再进到这个if语句
return
}
..... // 别的操作
})
Vue 路由传值的几种方法
方案一:
getDescribe(id) {// 直接调用$router.push 实现携带参数的跳转
this.$router.push({
path: `/describe/${id}`,
})
方案一,需要对应路由配置如下:
{ path: '/describe/:id',
name: 'Describe',
component: Describe
}
很显然,需要在path中添加/:id来数乎岩对应 $router.push 中path携带的参数。在子组件中可以使用来获取传递的参数值。
this.$route.params.id
方案二顷如:
父组件中:通过路由属性中的name来确定匹配的路由,通过params来传递参数。
this.$router.push({ name: 'Describe', params: { id: id
}
})
对应路由配置: 注意这里不能使用:/id来薯御传递参数了,因为父组件中,已经使用params来携带参数了。
{ path: '/describe',
name: 'Describe',
component: Describe
}
子组件中: 这样来获取参数
this.$route.params.id
方案三:
父组件:使用path来匹配路由,然后通过query来传递参数
这种情况下 query传递的参数会显示在url后面?id=?
this.$router.push({ path: '/describe', query: { id: id
}
})
对应路由配置:
{ path: '/describe',
name: 'Describe',
component: Describe
}
对应子组件: 这样来获取参数
this.$route.query.id
这里要特别注意 在子组件中 获取参数的时候是$route.params 而不是
$router 这很重要~~~
vue router怎样往路由中添加
比如说书籍详档陪情页面携带参数 `bookId` ``` a v-link="{name:'book',params:{bookId:123}}" ``` 在书籍详情的组件里面提取bookId ``` export default(){data(){},ready(){console.log(this.$route.params.bookId) //123} } ```` 同时在路由那里这明蠢好样配置: ``` "/book/:bookId":{ name:"book", component:"" } ```` 还有,,,这种问题应该去segmentfault或者激铅stackoverflow
vue使用require.context,动态变量怎么办
在日常的功能练习和调试过程中,需要一个demo项目进行功能测试,由于频繁.vue页面的同时,又要再router.js文件里面注册路由,感觉有点无聊和枯燥。基于此出发点,考虑能否自动读取文件夹下的文件进行路由注册。
借鉴思路:
参考vue的功能基础组件的自动化全局注册,看到一个require.context方法,可以读取某个文件夹下的文件信息。因此考虑,使用这个方法,获取views文件夹下的.vue页面,文件夹名称作为路由名称
require.context的使用介绍:
一个webpack的api,通过执行require.context函数获取一个特定的上下文,主要用来实现自动化导入模块,在前端工程中,如果遇到从一个文件夹引入很多模块的情况,可以使用这个api,它会遍历文件夹中的指定文件,然后自动导入,使得不需要每次显式的调用import导入模块
页面代码:
如下袭渣仿图示,views文件夹下的内容,都需要进行路由注册。
文件的路径有2种,(1)简单的vue功能页面,直接挂在views文件夹下;(2)复杂的页面,在views下在新建文件夹进行处理。
目前需要自动注册的路由页面,是针对“直接挂在views文件夹”下的页面。(因为views下的二级页面,暂时没有想到好的方案)

router/index.js页面代码
心路历程:
(1)一开始的想法,是想着用数组对象的方式定义好,路由名称和引入的路径地址,但是觉得还是不够自动化,新建.vue文件的时候还是需要手动添加;
(2)后来想到用使用require.context方法得到fileName,然后根据字符串裁减和拼接,得到我所梁冲需的url和文件相对路径;
例如: component: () =import(【变量】),但是后来发现,import()里面,不能使用变量!!!!!!!!!
原因:根据es6module语法,由于import是静态执行,所以不能使用表达式和变量这些只有在运行时才能得到结果的语法结构。
(3)由由于import的使用限制,不能动态使用() =import的语法,因此在考虑,能否直接替换掉这种异步加载引入的写法。经过分析,得出pathConfig字段里面有一个属性的内容,是指定的vue页面的default模块内容。经拍纤测试,可以使用。
pathConfig的打印内容如下示:

(4)因此“views”文件夹下的".vue"文件,引入成功,并用变量routerAry存储起来,使用concat方法把其他需要手动注册的路由信息,连接起来,进行路由注册。
vue中路由传参的三种基本方式
最近在项目中遇到了很多页面跳转携带参数的处理,就在这里做个小小的总结,下面来看蚂档一下常见的三种传慧扒参方式
有如下场景,点击封装好的公共组件跳转到对应的详情页面
businessTable @click.native="projectDetail(item)"/businessTable
在父组件中写点击跳转方法如下
在路由配置页面配置路由如下
要注意的一点是需要在path中添加/:item来对应 $router.push 中path携带的参数。
在子组件中获取传递的参数值。
在父组件中写点击跳转方法如下
在路由页面配置路由如下
在子组件中获取传递的参数值。
在父组件中写点击跳转方法如下
这种情况下 query传递的参数会显示在url后面?item=?
在路由页面配置路由如下
在子组件中获取传递的参数值。
这里要特别注意闷碧乱 在子组件中 获取参数的时候是$route.params 而不是
$router 这很重要
在使用路由器时,学习这些技巧可以使您更轻松地管理您的网络,让您的上网更加方便和快捷。