延續前面的三篇文章:html
距離正式開發還須要介紹一下路由變化,這樣就算對vue3.0開發的以有了初步瞭解,以及完成項目的基礎建設。vue
//目前最新版本 npm i --save vue-router@4.0.0-beta.9 "vue-router": "^4.0.0-beta.9"
//配置 import { createRouter, createWebHashHistory } from 'vue-router' const router = createRouter({ //createWebHistory() hostory模式 history: createWebHashHistory(),//hash模式 routes: [ { path: '/', redirect: '/home', }, // 動態路徑參數 以冒號開頭 { path: '/home', component: () => import('../views/home.vue') }, ], }) export default router //使用 main.js app.use(router)
本來是想要 <router-link>
渲染成某種標籤,可是使用起來會不夠直觀清晰git
//以前 //tag="button" router-link將會渲染成button標籤 <router-link to="/" tag="button"> <Icon>home</Icon><span class="xs-hidden">Home</span> </router-link> //以後 使用scoped slot替換 <router-link to="/"> <button role="link"> <Icon>home</Icon><span class="xs-hidden">Home</span> </button> </router-link>
router-link
的渲染
簡寫方式(有坑)github
//從第二篇的地方有介紹過v-slot有簡寫方式,可是這裏值得注意,下方的寫法在瀏覽器渲染卻有不通 <router-link to="/about" #custom="{ href }"> <a :href="href">1.{{href}}</a> </router-link> <router-link to="/about" v-slot:custom="{ href }"> <a :href="href">2.{{href}}</a> </router-link> <router-link to="/about" custom v-slot="{ href }"> <a :href="href">3.{{href}}</a> </router-link>
渲染以後的結果只有第三個正常顯示
vue-router
---
### vue-router的APInpm
和vue3.0同樣,api所有走import,不放在this裏面(打印 require('vue-router'))segmentfault
{ path: '/my', meta: { requiresAuth: true }} //以前 router.beforeEach((to, from, next) => { if (to.meta.requiresAuth && !auth.loggedIn()) next('/login') else next() }) //建議3.0 router.beforeEach((to, from, next) => { if (to.matched.some(record => record.meta.requiresAuth)) // ...do sth })
router-link-active/router-link-exact-active class類名
假設當前路由/parent/1/child/2
api
url | active | exact active |
---|---|---|
/parent/1/child/2 | ✅ | ✅ |
/parent/1/child/3 | X | X |
/parent/1/ | ✅ | X |
//my.vue import {useRouter,useRoute} from 'vue-router' //見上文介紹的vue-router目前的API setup(props,ctx){ console.log(useRouter(window.location.pathname));//相似原來的 this.$router console.log(useRoute(window.location.pathname));//相似原來的 this.$route }
//路由記錄的值 const routeRecord: RouteRecord = { path: '/new-route', name: 'NewRoute', component: NewRoute }
router.addRoute(route: RouteRecord) //新增一個路由記錄 router.removeRoute(name: string | symbol) //刪除 router.hasRoute(name: string | symbol)://判斷是否存在 router.getRoutes(): RouteRecord[] //獲取記錄列表
將router.push與router.afterEach,router.onError保持一致數組
router.push('/dashboard').then((failure) => { if (failure) { failure instanceof Error // true failure.type // NavigationFailure.canceled 【aborted,canceled,duplicated】 } }).catch(()=>{...})
//之前 <transition :name="transitionName" > <keep-alive > <router-view></router-view> <router-view></router-view> </keep-alive> </transition> //以後 <router-view v-slot="{ Component }"> <transition :name="transitionName" mode="out-in"> <component :is="Component"></component> </transition> </router-view>
不經常使用,vue2.0在官網上的介紹瀏覽器
//改動不大,只是爲了更加貼近原生,將屬性名統一了 { selector:..,x: 0, y: 200,behavior } // becomes { el:...,left: 0, top: 200,offset }
<router-view :route="routeWithModal"></router-view> const App = { computed: { routeWithModal() { if (backgroundView) { return this.$router.resolve(backgroundView) } else { return this.$route } } } }
// 以前 router.beforeEach((to, from, next) => { if (!isAuth) next(false) else next() }) // 之後能夠 router.beforeEach(() => isAuth)
安裝瞭解完路由的相關變更,直接能夠開幹了。整個過程下來,vue3.0的變化仍是能夠接受的,在向更好的方向發展。推薦使用vite也很好,不少東西都內置,開箱即用。至於typesciprt,只是vue3.0更好的支持了ts語法,可是用不用,怎麼用仍是看項目以及開發者自己。目前介紹vue3.0的使用,到此其實已經能夠開始寫項目了。還有Vue Composition API沒介紹,可是簡單和經常使用的API在上面已經用過了,後期再更新。
介紹到這裏,有遺漏歡迎你們補充,喜歡的動手收藏點贊。