SPA 錨點值改變後 不會發起請求,發起ajax請求,局部改變頁面數據javascript
前端路由html
npm i vue-router -S
Vue.use(VueRouter);
import VueRouter form './x.js';
var router = new VueRouter();
4:配置路由規則 router.addRoutes([路由對象]);
前端
{path:'錨點值',component:要(填坑)顯示的組件}
5:將配置好的路由對象交給Vuevue
<router-view></router-view>
<router-link to="/xxx/x">點我</router-link>
錨點值代碼維護不方便,若是須要改變錨點值名稱java
{ name:'home',path:'/home',component:Home}
2:在router-link的to屬性中描述這個規則react
<router-link :to="{name:'home'}></router-link>"
Vue.prototype.xxx = {add:fn}
查詢字符串ajax
:to="{name:'detail',query:{id:hero.id} }"
{name:'detail',path:'/detail',component:Detail}
this.$route.query.id
<a href="/detail?id=1">
path方式vue-router
<a href="/detail/1">
:to="{name:'detail',params:{id:hero.id} }"
{ name:'detail',path:'/detail/:id'}
this.$route.params.id
查詢字符串配置參數npm
path方式配置參數編程
總結書寫代碼注意事項
/a
的別名是/b
,意味着當用戶訪問/b
時,URL會保持爲/b
,可是路由匹配則爲/a
,就像用戶訪問/a
同樣。
{ path: '/a', component: A, alias: '/b' }
// 方式一:字符串路徑path { path: '/a', redirect: '/b' } // 方式二:name { path: '/a', redirect: {name: 'b'} } // 方式三:動態返回重定向目標 { path: '/a', redirect: to => { // 方法接收 目標路由 做爲參數;return 重定向的 字符串路徑/路徑對象 }}
router-link to="/xxx" 命名路由
下圖來自vue-router源碼
get:function () {
return 本身的router對象;
}
})
須要根據錨點值的改變,僅僅變化上圖中的Profile到Posts組件,便可使用嵌套路由
代碼思想
1:router-view的細分
它其實就是一個路由改變的事件回調函數
全局路由守衛
router.beforeEach((to, from,next) => {})
router.afterEach((to, from) => {})
路由獨享的守衛
const router = new VueRouter({ routes: [ { path: '/foo', component: Foo, beforeEnter: (to, from, next) =>{ // ... } } ] })
組件內的守衛
const Foo = { template: `...`, beforeRouteEnter (to, from, next) { // 在渲染該組件的對應路由被 confirm 前調用 // 不!能!獲取組件實例 `this` // 由於當守衛執行前,組件實例還沒被建立 // 可是,能夠這樣用 next(vm => { // 經過 `vm` 訪問組件實例-> 將來的組件this vm.msg = '數據在此'; }) }, beforeRouteUpdate (to, from, next) { // 觸發條件見下文 // 能夠訪問組件實例 `this` }, beforeRouteLeave (to, from, next) { // 導航離開該組件的對應路由時調用 // 能夠訪問組件實例 `this` } }
beforeRouteUpdate的觸發條件(動態路由參數變化時)
{path:"/xxx/:id"}
<router-link to="/xxx/1"
<router-link to="/xxx/2"
next
next(false)
重定向
next('/xxx') // 或者 next({name:'路由對象的name屬性'});
to||from
路由meta元數據 -> meta是對於路由規則是否須要驗證權限的配置
{ meta:{ isChecked:true } }
路由鉤子 -> 權限控制的函數執行時期
router.beforeEach(function(to,from,next) { // 判斷to或from的fullPath便可 } )
this.$router.push({ name:'xxx',query:{id:1},params:{name:'abc'} });
{name:'xxx',path:'/xxx/:name'}
3: 根據歷史記錄.前進或後退
this.$router.go(-1|1);
咱們須要在路由改變時變化頁面,ok!同時咱們但願加上一些淡入淡出等效果,就能夠用上transition內置組件
另外,考慮到緩存問題,就加上keep-alive組件結合使用
所以,你看到是這樣的
<transition> <keep-alive> <router-view></router-view> </keep-alive> </transition>