一個月的期限立刻要到了,真是彈指一瞬間的匆匆...
上節主要記錄了我從子組件修改父組件
傳遞過來的prop值得一個思路過程
因爲近期對於權限控制方面有必定的需求,因此去了解了一下vuex
與vue-router
,那麼今天就來總結一下關於vue-router
的一些已有的認識,而且有時間的話進行一下系統的學習css
總結vue-router
基於vue-cli
項目的安裝及簡單使用html
npm install vue-router
vue
一般來講路由都存放在一個單獨的.js
文件,路徑以下:vue-router
src - router - index.js
vuex
個人index.js
現有代碼以下:vue-cli
import Vue from 'vue' import Router from 'vue-router' import Frame from '@/components/frame' import StudentList from '@/components/student/student-list' import StudentAdd from '@/components/student/student-add' import DemoSlot from '@/components/demo/demo-slot' import DemoPage from '@/components/demo/demo-page' Vue.use(Router) export default new Router({ routes: [ { path: '/', component: Frame, children: [ { path: '/student/list', component: StudentList }, { path: '/student/add', component: StudentAdd }, { path: '/demo/slot', component: DemoSlot }, { path: '/demo/page', component: DemoPage } ] } ] })
路由建立好了,那麼接着就應該將整理好的路由與項目關聯起來啦npm
只有兩個操做點:編程
咱們打開src - main.js
element-ui
import Vue from 'vue' import ElementUI from 'element-ui' import 'element-ui/lib/theme-chalk/index.css' import App from './App' import router from './router' Vue.use(ElementUI) Vue.config.productionTip = false /* eslint-disable no-new */ new Vue({ el: '#app', router, components: { App }, template: '<App/>' })
如今,凡是在路由組件中配置過的路由記錄,如今均可以被導航啦數組
注:沒有配置過的路由記錄是不能夠被導航的
1.<router-link to="/student/list" tag="div">學員列表</router-link>
意思是經過路由導航到/student/list
記錄點,to
設置目標路由記錄點,tag="div"
表示router-link
最終會呈現爲一個div
元素
經過向根實例傳入router實例,router會注入到每一個組件中,能夠經過:this.$router
在各個組件當中獲取router的實例
2.
例如:
this.$router.push()
進行編程式導航
this.$router.go()
前進後退等
簡單來理解的話:
hash
:url中帶有#
,而且只修改#以後的url
,默認狀況下vue-router是hash模式
history
:url中不帶#,使用history.pushState
完成跳轉而且須要後臺配合
使用,使用history模式須要顯式指定
不過二者的跳轉都不會使頁面從新加載
守衛總共分爲:全局守衛
、路由守衛
、組件守衛
三種
意思就是分三個區域,全局區域
,路由區域
,組件區域
,很明顯是做用域不一樣
全局守衛分3個:前置beforeEach
、後置afterEach
、解析beforeResolve
路由獨享守衛:進入前beforeEnter
組件守衛:進入(組件對應)路由前beforeRouteEnter
、路由改變前(組件複用時)beforeRouteUpdate
、離開(組件對應)路由前beforeRouteLeave
守衛執行順序:導航解析流程
附一張我本身的理解:
注:帶有next的守衛必定要調用next()
前些天在作權限時經過查找資料,最終發現經過全局前置守衛
,能夠實現一些權限控制
的功能,固然他並不能獨立完成須要配合vuex
來使用
const router = new VueRouter({ routes: [ { path: '/foo', component: Foo, children: [ { path: 'bar', component: Bar, // a meta field meta: { requiresAuth: true } } ] } ] })
注:meta頗有用的,例如咱們能夠經過爲路由記錄添加meta信息來表明該路由所表明的功能模塊代碼,在addRoutes時判斷是否有權限加載此路由記錄
因爲咱們使用的是SPA的方式開發網頁,那麼有一個龐大的js文件是可想而知的
路由懶加載便是爲了下降沒必要要的開銷,在路由被訪問時才真正的去加載它
用法:
const Foo = () => import('./Foo.vue')
只修改了引入方式,使用方式並無改變
const router = new VueRouter({ routes: [ { path: '/foo', component: Foo } ] })
用法:
假設咱們有以下路由:
var router = new Router({ routes: [ { path: '/', component: Frame, ] } ] })
而且有以下數組:
var routes = [{ path: '/index', name: '首頁', component: 組件, children: [{ path: 'page1', component: 組件1 }, { path: 'page2', component: 組件2 }]
那麼能夠:
router.addRoutes(routes)
以後就能夠成功的導航到新增的三個路由記錄啦