vue3 路由封装

2021-06-17  本文已影响0人  小李不小
1.安装vue-router 最新 支持vue3 router的版本

新建router/index.js文件

import { createRouter, createWebHistory } from 'vue-router'

const routes = [
  {
    path: '/',
    component: () => import('../views/Dome.vue'),
    meta: {
      title: 'Dome1'
    }
  },
  {
    path: '/dome2',
    component: () => import('../views/Dome2.vue'),
    meta: {
      title: 'Dome2'
    }
  }
  }
]

const router = createRouter({
  history: createWebHistory(),
  scrollBehavior: () => ({ y: 0 }),
  routes: routes
})


  //路由守卫
router.beforeEach((to, from, next) => {
  const token = localStorage.getItem('stor')
  // const role = localStorage.getItem('ms_username');
  // NProgress.start(); //进度条
  if (to.path !== '/login' && !token) {
    console.log('1')
    next('/login');
  } else {
    console.log('2')
    if (to.name === 'Login' && token) {
      router.push('/')
    } else {
      next();
    }
  }
});


export default router

3. main.js 文件引入

import { createApp } from 'vue'
import router from './router/index' //引入
import App from './App.vue'
const app = createApp(App)

app.use(router)

app.mount('#app')

在2.x中使用new Vue创建实例,3版本用createApp 创建实例,2.x中的vue.use使用插件现在使用app.use

4.页面跳转

1,可以继续使用 router-link
2,事件跳转

引入 import { useRouter } from 'vue-router'
    const router = useRouter()
     function goback() { //跳转方法
     //  router.push('/')   //无参数跳转
      router.push({  //有参数
        path:'/',
        query:{
          inType:1
        }
      })
    }

3,参数接收

import { useRoute } from 'vue-router'
const route = useRoute()
console.log(route.query)

5.完整案例如下:

Dome.vue

<template>
  <div>
    <div>dome</div>
    <div>{{count}}</div>
    <button @click="changCount">改变count</button>
    <router-link to='/dome2' tag="span">dome02</router-link>
  </div>
</template>

<script>
import { ref , onMounted } from 'vue'
import {useRoute} from 'vue-router'
export default {
  setup(){
    let count = ref(0)
    const changCount =()=>{
      // console.log(count.value)
      count.value++;
    }
    onMounted(()=>{
      //接收参数
      const route = useRoute()
      console.log(route.query)
    })
    //注意点:在组合API中定义的变量/方法,要想在外界使用,必须要通过return {xxx,xxx} 暴露出去
    return {
      count,
      changCount
    }
  }
}
</script>

Dome2.vue

<template>
  <div>
    <button @click="goback">回首页</button>
    <button @click="gobackParams">回首页带参数</button>
  </div>
</template>

<script>
import {useRouter} from 'vue-router'
export default {
  setup(){ 
    const router = useRouter()
    function goback() {
      router.push('/')
    }
    const gobackParams =()=>{
      router.push({
        path:'/',
        query:{
          inType:1
        }
      })
    }
    return{
      goback,
      gobackParams
    }
  }
}
</script>

<style>

</style>
上一篇下一篇

猜你喜欢

热点阅读