首页 > 编程语言 >vue2 路由24 声明式导航 编程式导航 路由守卫

vue2 路由24 声明式导航 编程式导航 路由守卫

时间:2022-12-17 15:13:13浏览次数:46  
标签:24 vue next components import router 导航 路由

用户点击了页面的路由链接,会导致hash值发生变化,路由监听到hash值的链接发生的变化,会把对应的组件渲染到当前的页面中

 

 

 安装:

直接安装router的话会安装最新版的,最新版仅支持vue3,安装后报错的请检查一下自己的npm版本是否过高

npm i [email protected] -S

index:

import Vue from 'vue'
import VueRouter from 'vue-router'

// 调用vue.use函数,把VueRouter安装为vue插件
Vue.use(VueRouter)

// 创建路由的实例对象
const router = new VueRouter()

// 向外贡献路由的实例对象
export default router

main:

import Vue from 'vue' import App from './App.vue' import axios from 'axios' import router from './router/index'
Vue.config.productionTip = false
new Vue({   render: h => h(App),   router }).$mount('#app')

  

 

 

正常使用:

app.vue:

<router-link to="/Home">首页</router-link>

// 占位符来的,必须要写
<router-view></router-view>
router:
    index.js:
import Vue from 'vue'
import VueRouter from 'vue-router'

import Home from '@/components/Home.vue'
import Movie from '@/components/Movie.vue'
import About from '@/components/About.vue'

import Tab1 from '@/components/tabs/Tab1.vue'
import Tab2 from '@/components/tabs/Tab2.vue'
import Ttt1 from '@/components/tabs/tab/Ttt1.vue'
import Ttt2 from '@/components/tabs/tab/Ttt2.vue'

// import Login from '@/components/Login.vue'
// import Main from '@/components/Main.vue'
// 调用vue.use函数,把VueRouter安装为vue插件
Vue.use(VueRouter)

// 创建路由的实例对象
const router = new VueRouter({
    routes: [
        // 重定向地址,强制跳到首页
        { path: '/', redirect: '/home' },
        // 路由规则
        {
            path: '/home',
            component: Home
        },
        {
            path: '/movie/:mid',
            component: Movie,
            props: true
        },
        {
            path: '/about',
            component: About,
            // 重定向
            redirect: '/about/tab1',
            children: [
                {
                    path: '',
                    component: Tab1
                },
                {
                    path: 'tab2',
                    component: Tab2,
                    redirect: '/about/tab1/ttt1',
                    children: [
                        {
                            path: '',
                            component: Ttt1
                        },
                        {
                            path: 'ttt2',
                            component: Ttt2
                        }
                    ]
                }
            ]
        }
    ]
})

// 向外贡献路由的实例对象
export default router
<template>
  <div class="movie-container">
    <!-- this.$route 是路由的“参数对象” -->
    <!-- this.$router 是路由的“导航对象” -->
    <h3>Movie 组件 --- {{ $route.params.mid }} --- {{ mid }}</h3>
    <button @click="showThis">打印 this</button>
    <button @click="goback">后退</button>
    <!-- 在行内使用编程式导航跳转的时候,this 必须要省略,否则会报错! -->
    <button @click="$router.back()">back 后退</button>
    <button @click="$router.forward()">forward 前进</button>
  </div>
</template>

<script>
export default {
  name: 'Movie',
  // 接收 props 数据
  props: ['mid'],
  methods: {
    showThis() {
      console.log(this)
    },
    goback() {
      // go(-1) 表示后退一层
      // 如果后退的层数超过上限,则原地不动
      this.$router.go(-1)
    }
  }
}
</script>

<style lang="less" scoped>
.movie-container {
  min-height: 200px;
  background-color: lightsalmon;
  padding: 15px;
}
</style>

  编程式路由

后退页面:
this.$router.go(-1)
或:
   @click="$router.back()"
前进页面:
this.$router.go(1)
或:
    @click="$router.forward()"

  路由守卫:

    可以控制路由的访问权限

router.beforeEach((to, from, next) => {
    // to是将要访问的路由的信息对象
    // from 是将要离开的路由信息对象
    // next是一个函数,调用next表示放行
})

强制跳转到登录页:
    next('/Login')   强制停留在本主页:     next('false')

  路由案例:

    全局前置守卫:

router.beforeEach((to, from, next) => {     // to是将要访问的路由的信息对象     // from 是将要离开的路由信息对象     // next是一个函数,调用next表示放行     // next('/Login')
    // 分析:     // 需要先拿到用户的hash地址     // 判断hash地址是否等于后台主页     // 如果等于后台主页需要先跳转到login页登录先     // 如果等于后台主页,则需要读取localStorage中的token值,有token值则放行,没有则跳转到login页     // 如果不等于后台主页则直接放行     if (to.path === '/main') {         const token = localStorage.getItem('token')         console.log(token)         if (token) {             next()         } else {             next('/login')         }     } else {         next()     } })

    

 

标签:24,vue,next,components,import,router,导航,路由
From: https://www.cnblogs.com/wencaiguagua/p/16985296.html

相关文章

  • 洛谷P3224 [HNOI2012]永无乡 题解 splay tree 启发式合并
    题目链接:https://www.luogu.com.cn/problem/P3224主要知识点是:树上启发式合并,即每次合并将小的树里面的每个点合并大大的树里面,时间复杂度\(O(n\log^2n)\)。同时需要......
  • 我的网址导航
    谷歌 Youtube 和B站一样有一些教学视频,Python,数学等等FaceBookTwitter......
  • 2022.12.17 - vue Router4 关于嵌套路由配置无匹配页面导致失效问题
    constroutes=[ { path:'', name:'home', component:()=>import(/*webpackChunkName:"home"*/'../pages/index'), children:[ { path:'', ......
  • 小游戏:基于鸿蒙的24点纸牌游戏
    开发设计实现文档 一、编写目的 灵感来源于二十四点纸牌游戏,将生活中的纸牌游戏在电脑网页上实现。学会以后在空闲时可以玩一玩,锻炼一下速算能力。 二、项目目......
  • 路由协议 OSPF
    OSPF(OpenShortestPathFirst)是一个内部网关协议(InteriorGatewayProtocol,简称IGP),一个链路状态路由选择协议,用于在单一自治系统(autonomoussystem,AS)内决策路由。......
  • P2466 [SDOI2006]Sue的小球
    我们注意到,这道题要求小球最大价值和,并且即使权值变为负的也要算上。因此,状态转移时只要维护所有小球损失的价值“最小即可。这是一道典型的区间dp,因此我们可以设值状态......
  • Android实现导航菜单左右滑动效果
    本文给大家介绍在Android中如何实现顶部导航菜单左右滑动效果。今天给大家介绍在Android中实现顶部导航菜单左右滑动效果的二种解决方案。第一种解决方案: 然使and......
  • 【LeeCode】2488. 统计中位数为 K 的子数组 -- 太难了
    【题目描述】给你一个长度为n的数组nums,该数组由从1到n的不同整数组成。另给你一个正整数k。统计并返回num中的中位数等于k的非空子数组的数目。注意:数组......
  • 解决使用innobackupex备份mysql产生returned OS error 124【转】
    ###简介今天在使用innobackupex全量备份数据库的时候发生了下面的错误错误详情19070515:22:18>>logscannedupto(258819807308)xtrabackup:Generatingalist......
  • python24
    Python 变量类型变量是存储在内存中的值,这就意味着在创建变量时会在内存中开辟一个空间。基于变量的数据类型,解释器会分配指定内存,并决定什么数据可以被存储在内存中。......