vue 路由

本文详细介绍了VueRouter的基本配置,包括安装、组件使用、路由数组定义、路由模式(hash、history和abstract)、激活状态控制、命名路由、导航方法以及二级路由和路由守卫的使用和示例。
摘要由CSDN通过智能技术生成
一、路由基本配置
  • 安装vue-router   npm install vue-router
  • 引入vue-router   import VueRouter  from 'vue-router'  (main.js实现)
  • 注册vue-router   Vue.use(VueRouter ) (main.js实现)

注册完之后等同于全局注册了两个组件。

RouterLink 和RouterView。这两个组件,在vue中,还有另外的写法:router-link 与router-view

//某个vue component具体使用
<template>
  <div>
    <div class="footer_wrap">
      <router-link to="/user">用户</router-link>
      <router-link to="/blog">文章</router-link>
    </div>
    <div >
      <router-view></router-view>
    </div>
  </div>
</template>
  • 定义路由数组 (main.js实现)
 const routes= [{
      path: "/user",
      component: User
    },{
      path: "/blog",
      component: Blog
    }]
  

   上述路由数组中的component:User ;component:Blog 需要自己定义来实现。并在同一个文件中引入。

  • 生成路由对象(main.js实现)
    const router = new VueRouter({
      routes
    })
  • 路由对象注入到vue实例中, this可以访问$route和$router(main.js实现)第五部分,有使用this.$router

new Vue({
  router,
  render: h => h(App),
}).$mount('#app')
二、路由进一步理解
  • 路由模式:
    const router = new VueRouter({
      routes,
      mode:'hash', //默认采用hash模式
      //mode:'history',
      //mode: 'abstract'
    
    })

采用默认hash模式时候:

      <router-link to="/user">用户</router-link>
      <router-link to="/blog">文章</router-link>

       这两种模式等同于

      <a href="#user">用户</a>

      <a href="#blog">文章</a>

      点击“用户”或者文章时候,页面URL为:

      http://ip:port/#/user

      http://ip:port/#/blog

 采用history模式时候:

(1)history其实更美观

(2)history需要后端配合

(3)history 转化为a链接时候,其实实现了取消默认跳转行为,不然就跳转到

      <router-link to="/user">用户</router-link>
      <router-link to="/blog">文章</router-link>

       这两种模式等同于

      <a href="/user">用户</a>

      <a href="/blog">文章</a>

      点击“用户”或者文章时候,页面URL为:

      http://ip:port/user

      http://ip:port/blog

 采用abstract模式时候: 该模式用到非浏览器环境中,不做推荐。

三、激活状态 

现在路由数组中有三个路由:当访问/user时候,/能够模糊匹配上,/user能够精确匹配

/模糊匹配,对应的a标签会添加  router-link-active 类选择器
/user精确匹配 ,  对应的a标签会添加  router-link-active    router-link-exact-active 类选择器
/blog完全匹配不上,什么都不添加

当访问/时候,/能够精确匹配上

/精确匹配,对应的a标签会添加  router-link-active    router-link-exact-active 类选择器
/user完全匹配不上
/blog完全匹配不上
  • 如果想让模糊匹配上的,不带  router-link-active样式。需要对应RouterLink加  exact:true

  <router-link to="/"  exact=true>用户</router-link>

  • 如果想更换router-link-active  为selected ,   router-link-exact-active 为 e-selected

(就是改个名字出现)

  <router-link
       to="/"  
       exact=true   
       active-class='selected'  
       exact-active-class='e-selected' >
       用户
  </router-link>
四、命名路由

 Vue中,你可以为路由配置对象指定一个名称(命名路由),以便在代码中或模板中更方便地引用这个路由。命名路由的使用有助于提高代码的可读性和维护性。

const routes = [
  {
    path: '/',
    component: Home,
    name: 'home' // 这里是命名路由的地方
  },
  {
    path: '/about',
    component: About,
    name: 'about'
  },
  {
    path: '/contact',
    component: Contact,
    name: 'contact'
  }
];

在上面的例子中,每个路由配置对象都包含一个 name 属性,用于指定路由的名称。这样,你可以通过名称来引用路由,而不必依赖于路径字符串。在组件中使用命名路由的例子:

<!-- 使用 router-link 组件 -->
<router-link :to="{ name: 'home' }">Home</router-link>
<router-link :to="{ name: 'about' }">About</router-link>
<router-link :to="{ name: 'contact' }">Contact</router-link>
五、pushreplace方法导航

除了使用<router-link :to="{ name: 'home' }">Home</router-link>进行路由导航外,还可以使用push,replace方法。

// 使用 router 对象的 push 或 replace 方法
methods: {
  goToHome() {
    //this.$router.push({ name: 'home' });
    this.$router.push('/home');
  }
}
// 使用 router 对象的 push 或 replace 方法
methods: {
  goToHome() {
    //this.$router.replace({ name: 'home' });
    this.$router.replace('/home');
  }
}

两者的区别,在于回退的时候,如果是push ,还能够回退当前路由,如果是replace不能回退到当前路由

六、 二级路由
const routes = [
  {
    path: "/", // 默认hash值路径
    redirect: "/home" // 重定向到/find
  },
  {
    path: "/home",
    name: "Home",
    component: Home,
    children: [
      {
        path: "recommend",
        component: Recommend
      },
      {
        path: "ranking",
        component: Ranking
      }
    ]
  },
  {
    path: "/about",
    name: "About",
    component: About
  }]

当浏览器中输入 http://ip:port 时候,会自动跳转到  http://ip:port/#/home

如果访问http://ip:port/#/home/recommend时候,则会用Recommend组件渲染。

七、路由守卫

场景: 当你要对路由权限判断时
语法: router.beforeEach((to, from, next)=>{//路由跳转"之前"先执行这里, 决定是否跳转})
参数1: 要跳转到的路由 (路由对象信息)    目标
参数2: 从哪里跳转的路由 (路由对象信息)  来源
参数3: 函数体 - next()才会让路由正常的跳转切换, next(false)在原地停留, next("强制修改到另一个路由路径上")
注意: 如果不调用next, 页面留在原地

// 例子: 判断用户是否登录, 是否决定去"我的主页"/index
const isLogin = true; // 登录状态(未登录)
router.beforeEach((to, from, next) => {
  if (to.path === "/index" && isLogin === false) {
    alert("请登录")
    next(false) // 阻止路由跳转
  } else {
    next() // 正常放行
  }
})

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值