前言-vue路由
Vue-router是Vue官方的路由插件,与Vue.js深度集成.
在使用了vue-router的单页面应用中,url的改变会引起组件的切换,从而达到页面切换的效果,所以如何让URL按照我们的意愿去改变和URL改变后页面去向何处是配置vue-router的两大问题.
[SPA网页]前端渲染使得单页面富应用的SPA页面得以实现,整个网页只有一个HTML页面,静态资源服务器里只有一套HTML & CSS,甚至只有一套JS.
[富应用] 得以实现依赖于发送至服务端的一个新的请求URL从服务器中获取到资源后,前端路由会负责分配资源给页面的相应组件;
[单页面] 的实现需要url在前端改变,前端路由出现后,前端路由会根据router的监听,从映射关系里找到需要改变的部分,抽取分配新的资源,并仅仅重新渲染需要改变的部分;
一、最基本路由配置
首先得安装vue-router,怎么装就不说了……
在我们安装vue-router成功后,项目文件的src内会出现一个”router”文件夹,这个文件夹内会有一个index.js,对router的配置就主要在这里完成了.
打开它,然后在 routes 数组中进行配置,一个页面的路由在这个数组里被集合为一个对象,其内部包括path和component等属性,对应着URL怎么样改变会做出怎样的反应;
1.配置router/index.js
1 | //这是在router/index.js,全部; |
component属性:值为一个页面,这个页面控件需要提前引入.
path属性:规定URL内出现什么时跳转到component属性对应的页面.
1 | //这是在router/index.js,末尾部分略去; |
2.配置App.vue
前面规定好了url改变为不同字符时会怎样进行跳转,现在得想想怎么才能让URL改变了,以我们的方式改变.
因为只有App.vue会被render渲染,大家一开始看到的和仅仅能操作的都只有App.vue,所以我们对URL改变方式的规定只能在这里进行.
认识两种新的标签,他们已经在全局被注册过了.
1 | <router-link to="要在URL上添加的字符">XXX</router-link> |
App.vue里所有的页面跳转都由< router-link>通过改变URL进行驱动.
< router-view>是一个占位标签,它规定了router-link标签需要显示在什么位置
,总之你删了它,router-link就显示不了了(那都不重要,我们先说路由吧……).
1 | <!-- 这是在App.vue中 --> |
然后你就可以npm run serve跑起你的项目来看看了;
可以看到依据Tag属性的规定是多了4个a标签的,我们点进去News看下,
URL依据router-link的to属性的值改变了,页面正确的跳转.
到此基本的路由配置就完成了.
二、路由懒加载技术
把不同的路由对应的组件分离,仅当某路由被触发时才会加载对应组件,会更加高效,并且第三方 & 底层支撑 & 公共App 除外, 其他的Vue页面组件都在服务器,随用随请求,确保对页面的影响最小.
其实就是改变一下router/index.js里对各个组件的引入方法啦……
通过箭头函数的方法进行.
1 | const routes = [ |
三、路由嵌套
我们的子页面在运作时可能会需要点击替换某个部分? 用户通过App.vue进入了一个子页面,点击了查看详情我们可能会需要把某个部分替换为详情界面,改变页面某个部分的内容,这时候会需要路由嵌套技术.
说简单些,就是在父页面的路由里规定子页面的路由,比如在News.vue的路由里规定NewsChild-1.vue的路由.
1 | //这是缩减过的router/index.js; |
这样就规定了在News页面出现URL改变后应当进行的操作.
自然,我们还得规定News页面下要怎样改变URL,进入News.vue进行操作.
1 | <!-- 这是News.vue; --> |
然后来看下渲染出的页面吧:
点击链接NewsChild-1:
URL变为/News/NewsChild-1,依据router-link的to属性值.
大可再在children数组里多嵌套几个页面组件,如法炮制即可.
四、动态路由
很多时候页面需要跳转到哪里是不能由我们写程序的来确定的,这就需要程序按照需求去自己决定,让路由得以动态改变.
1.动态路由配置
说简单些,我们不把[to需要增加的URL]和[path判定跳转的URL]写死就好了,把URL里需要经常变化的部分,利用v-bind与export default中的data数据互通起来,让URL跟随数据变动.
1 | //这是在router/index.js |
1 | <!-- 这是在App.vue里 --> |
来看下效果:
接下来点击用户:
URL成功拼接了了data里的数据UserId,即baixia.
2.动态路由传参
动态路由也是Vue传递数据的方式之一,利用$route来进行Vue页面组件(即vue文件)间的通信.
先来认识两个变量:
$router: index.js末尾利用createRouter创建的路由对象
$route: 当前正处于活跃状态下的路由对象,其中有一个params属性,全称parameters,利用它,可以取到我们URL里使用v-bind传的值.
比如User.vue需要获取App.vue的data中的userId数据:
1 | <!-- 在App.vue中(发方) --> |
1 | //在user.vue中(收方) |
User.vue里为了获取用户信息而使用的params,其获取哪个属性依赖于index.js里的path,的如果path:’/user/:abc’,那么User.vue的< script>里应当为:
1 | export default { |
总结
昨天拿到通知,说咱HTML5设计大赛拿了一等奖….
就挺离谱的,做的算是中规中矩吧个人感觉.这几天要赶赶Vue的进度了.
您要是觉得写的还不错,就给点个赞或者说几句吧:) 我都会回复 & 回赞哒 !