vue-router 快速入門
配置路由
$ npm install vue-router --save
routes.js
import Home from './pages/Home.vue'
import Gifs from './pages/Gifs.vue'
import User from './pages/User.vue'
export const routes = [
{ path: '', component: Home },
{ path: '/gifs', component: Gifs },
{ path: '/user/:id', component: User }
//指定路由和對應要渲染的組件
//404的path應該是'*',要放在最末尾,當前面的都匹配不到時才匹配到404頁面
//this.$route.params.id 可以從路由中拿到id數據
]
main.js
import VueRouter from 'vue-router'
import { routes } from './routes'
Vue.use(VueRouter)
//路由初始化
const router = new VueRouter({
routes
})
//將路由注入根組件
new Vue({
el: '#app',
...
router,
render: h => h(App)
})
App.vue
<template>
<div class="app">
<router-view></router-view>
</div>
</template>
在模板中標註出組件渲染的位置
#號的含義
#號前表示的是發送給服務端的請求,要求返回html文件,而#號後表示的是發送給本地js的請求以尋求解決
路由參數動態綁定
使用watch
watch: {
'$route'(to,from) {
//to當前路由,from上一個路由
this.id = to.params.id
}
}
路由的數據傳遞
<router-link :to="{ name: 'userEdit', params: { id: $route.params.id }, query: { locale: 'en', list: 2 } }"></router-link>
傳query
參數可以達到地址欄出現/?locale=en&list=2
通過 $route.query.鍵名
來訪問
命名視圖
router-view
可以通過配置名字 name
來指定組件渲染的位置,增加了組件的複用性,比如分成 header
main
hero
footer
來分別在一個視圖中的不同位置上加載不同的組件
組件懶加載
我們只需要加載我們需要的組件呈現給用戶,而其他不需要第一時間加載的組件,可以使用 webpack
實現異步加載,只在需要的時候纔會發出請求,請求加載另一個組件
routes.js
const User = resolve => {
require.ensure(['./components/user/User.vue'], () => {
resolve(require('./components/user/User.vue'))
}, 'GroupName')
}
//webpack 異步加載,通過組名,將要同時一起加載的組件打包加載