Vue-Router相关理解4

这篇具有很好参考价值的文章主要介绍了Vue-Router相关理解4。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

两个新的生命周期钩子

activateddeactivated是路由组件所独有的两个钩子,用于捕获路由组件的激活状态具体使用

activated路由组件被激活时触发

deactivated路由组件失活时触发

Vue-Router相关理解4,vue,vue.js,前端,javascript 

src/pages/News.vue

<template>
  <ul>
    <li :style="{opacity}">欢迎学习Vue</li>
    <li>news001 <input type="text"></li>
    <li>news002 <input type="text"></li>
    <li>news003 <input type="text"></li>
  </ul>
</template>

<script>
export default {
  name: 'News',
  data() {
    return {
      opacity: 1,
    }
  },
  activated() {
    console.log('News组件激活了');
    this.timer = setInterval(() => {
      this.opacity -= 0.01
      if (this.opacity <= 0) this.opacity = 1
    }, 16)
  },
  deactivated() {
    console.log('News组件失活了');
    clearInterval(this.timer)
  }
}
</script>

路由守卫

对路由权限进行控制

meta元数据对象

全局路由守卫

src/router/index.js

import VueRouter from 'vue-router'
// 引入组件
import About from '../pages/About'
import Home from '../pages/Home'
import News from '../pages/News'
import Message from '../pages/Message'
import Detail from '../pages/Detail'

//创建并暴露一个路由器
const router= new VueRouter({
    routes: [
        {
            name:'guanyu',
            path: '/about',
            component: About,
            meta:{title:'关于'}
        },
        {
            name:'zhuye',
            path: '/home',
            component: Home,
            meta:{title:'主页'},
            children: [
                {
                    name:'xinwen',
                    path: 'news',
                    component: News,
                    meta:{isAuth:true,title:'新闻'}
                },
                {
                    name:'xiaoxi',
                    path: 'message',
                    component: Message,
                    meta:{isAuth:true,title:'消息'},
                    children: [
                        {
                            name:'xiangqing',
                            // path: 'detail/:id/:title',  //使用占位符声明接收params参数
                            path:'detail',  //使用query参数
                            component: Detail,
                            meta:{isAuth:true,title:'详情'},
                            //第一种写法:props值为对象,该对象中所有的key-value的组合都会通过props传给Detail组件
                            // props:{a:'100',b:'1'},
                            //第二种写法:props值为true,则把路由收到的所有params参数通过props传给Detail组件
                            // props:true,
                            //第三种写法:props值为函数,该函数返回的对象中每一组key-value都会通过props传给Detail组件
                            props($route){
                                return{
                                    id:$route.query.id,
                                    title:$route.query.title
                                }
                            }
                        }
                    ]
                }
            ]
        }
    ]
})

// 全局前置路由守卫--初始化的时候、每次路由切换之前被调用
router.beforeEach((to,from,next)=>{
    console.log('beforeEach',to,from)
    if(to.meta.isAuth){ //判断是否需要鉴权
        if(localStorage.getItem('school')==='atguigu'){
            next()
        }else{
            alert('学校名不对,无权限查看!')
        }
    }else{
        next()
    }
})

// 全局路由后置守卫--初始化的时候、每次路由切换之后被调用
router.afterEach((to,from)=>{
    console.log('afterEach',to,from)
    document.title=to.meta.title||'硅谷系统'
})

export default router

独享路由守卫beforeEnter

src/router/index.js 

import VueRouter from 'vue-router'
// 引入组件
import About from '../pages/About'
import Home from '../pages/Home'
import News from '../pages/News'
import Message from '../pages/Message'
import Detail from '../pages/Detail'

//创建并暴露一个路由器
const router = new VueRouter({
    routes: [
        {
            name: 'guanyu',
            path: '/about',
            component: About,
            meta: { title: '关于' }
        },
        {
            name: 'zhuye',
            path: '/home',
            component: Home,
            meta: { title: '主页' },
            children: [
                {
                    name: 'xinwen',
                    path: 'news',
                    component: News,
                    meta: { isAuth: true, title: '新闻' },
                    // 独享前置路由守卫
                    beforeEnter: (to, from, next) => {
                        console.log('beforeEach', to, from)
                        if (to.meta.isAuth) { //判断是否需要鉴权
                            if (localStorage.getItem('school') === 'atguigu') {
                                next()
                            } else {
                                alert('学校名不对,无权限查看!')
                            }
                        } else {
                            next()
                        }
                    }
                },
                {
                    name: 'xiaoxi',
                    path: 'message',
                    component: Message,
                    meta: { isAuth: true, title: '消息' },
                    children: [
                        {
                            name: 'xiangqing',
                            // path: 'detail/:id/:title',  //使用占位符声明接收params参数
                            path: 'detail',  //使用query参数
                            component: Detail,
                            meta: { isAuth: true, title: '详情' },
                            //第一种写法:props值为对象,该对象中所有的key-value的组合都会通过props传给Detail组件
                            // props:{a:'100',b:'1'},
                            //第二种写法:props值为true,则把路由收到的所有params参数通过props传给Detail组件
                            // props:true,
                            //第三种写法:props值为函数,该函数返回的对象中每一组key-value都会通过props传给Detail组件
                            props($route) {
                                return {
                                    id: $route.query.id,
                                    title: $route.query.title
                                }
                            }
                        }
                    ]
                }
            ]
        }
    ]
})

// 全局路由后置守卫--初始化的时候、每次路由切换之后被调用
router.afterEach((to, from) => {
    console.log('afterEach', to, from)
    document.title = to.meta.title || '硅谷系统'
})

export default router

Vue-Router相关理解4,vue,vue.js,前端,javascript 

组件内路由守卫

从/home跳转到/about前触发beforeRouteEnter,从/about跳转到/test前触发beforeRouteLeave

Vue-Router相关理解4,vue,vue.js,前端,javascript

src/pages/About.vue

<template>
  <h2>我是About的内容</h2>
</template>

<script>
export default {
  name: 'About',
  beforeRouteEnter (to, from, next) {
    console.log('About--beforeRouteEnter',to,from);
    if(localStorage.getItem('school')==='atguigu'){
      next()
    }else{
      alert('学生名不对,无权查看!')
    }
  },
  beforeRouteLeave(to, from, next){
    console.log('About--beforeRouteLeave',to,from);
    next()
  }
}
</script>

路由器的两种工作模式

Vue-Router相关理解4,vue,vue.js,前端,javascript 

const router=new VueRouter({
    mode:'history',
    routes:[...]
})

export default router

项目打包npm run build

demo目录下

第一步:npm init出现package name:atguigu_test_server

第二步:npm i express

第三步:打开npmjs.com网站搜索connect-history-api-fallback

npm i connect-history-api-fallback

Vue-Router相关理解4,vue,vue.js,前端,javascript 

 文章来源地址https://www.toymoban.com/news/detail-594665.html

 

到了这里,关于Vue-Router相关理解4的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • vue-router.esm.js?a12b:2046 Uncaught (in promise) NavigationDuplicated: Avoided redundant navigation

    vue-router.esm.js?a12b:2046 Uncaught (in promise) NavigationDuplicated: Avoided redundant navigation to current location: \\\"/home\\\".   报错原因:重复点击路由导致,因为vue-router引入了promise,当我们使用this.$router.push时候需要多添加成功或失败的回调,否则就会报出以上的错误。 原代码 第一种         在进

    2023年04月08日
    浏览(132)
  • vue-router3.x和vue-router4.x相互影响的问题记录

    项目中有一个系统使用的微前端,主站使用是 vue2 实现的,使用的是 vue-router3.x 。子应用有使用 vue3 实现的,使用的为 vue-router4.x 。 该子应用中的页面A有通过操作按钮触发跳转到其他子应用页面B的需求,此时使用的是 vue-router4.x 的编程式导航API。 当通过点击主站的Tab切换回

    2023年04月26日
    浏览(40)
  • 路由,vue-router的基本用法,vue-router的常见用法$route.params、$router.push、$router.replace、$router.go

    路由(英文: router)就是 对应关系 。 SPA指的是一个web网站只有唯一的一个HTML页面, 所有组件的展示与切换 都在这唯一的一个页面内完成。此时, 不同组件之间的切换 需要通过 前端路由 来实现。 *结论:*在SPA项目中, 不同功能之间的切换 ,要 依赖于前端路由 来完成! 通俗

    2024年01月16日
    浏览(52)
  • 路由vue-router

    路由(英文:router)就是 对应关系 SPA 指的是一个 web 网站只有 唯一的一个 HTML 页面 ,所有组件的展示与切换都在这唯一的一个页面内完成。 此时,不同组件之间的切换需要通过前端路由来实现。 结论: 在 SPA 项目中,不同功能之间的切换 ,要依赖于 前端路由 来完成!

    2024年02月07日
    浏览(43)
  • vue-router笔记

    目的:为了实现SPA(单页面应用) vue-router是一个插件库 安装: 路由的配置路径:/src/router/index.js 路由组件的目录:/src/pages/ 一般组件的目录:/src/components/ 使用: main.js: App.vue: About.vue: 不可见的路由组件在哪?        被销毁了 嵌套路由的案例: 路由传参: query: 传参

    2024年02月12日
    浏览(51)
  • 【Vue-Router】别名

    后台返回来的路径名不合理,但多个项目在使用中了,不方便改时可以使用别名。可以有多个或一个。 First.vue Second.vue , Third.vue 代码同理 UserSettings.vue index.ts App.vue

    2024年02月12日
    浏览(42)
  • Uncaught SyntaxError: The requested module ‘/node_modules/.vite/deps/vue-router.js?v=9eef87ba‘

    错误代码 错误提示 浏览器中路由无法显示,提示错误 问题描述 解决方法

    2024年02月05日
    浏览(57)
  • Vue3配置路由(vue-router)

    紧接上篇文章,vue3的配置与vue2是有所差别的,本文就讲述了如何配置,如果本文对你有所帮助请三连支持博主。 下面案例可供参考 使用npm命令进行安装 : npm install vue-router@4 完成后我们打开项目根目录下的 package.json 文件: 如下即为成功 这里创建 view目录,然后在view目录

    2023年04月12日
    浏览(61)
  • VUE-CLI/VUE-ROUTER

    个人简介 📦个人主页:是Lay的主页 🏆学习方向:JAVA后端开发  📣种一棵树最好的时间是十年前,其次是现在! ⏰往期文章:【Java基础】面向对象进阶(二) 🧡喜欢的话麻烦点点关注喔,你们的支持是我的最大动力。 目录   前言: 1. 安装 1.1 npm安装 1.2 vue-cli安装 2. 初始化项

    2024年01月16日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包