精华内容
下载资源
问答
  • vue-router
    千次阅读
    2022-05-01 00:44:30

    前言

    在前端开发中,使用Vue做项目的时候关于路由的管理处理是非常重要的知识点,路由的管理也是比较常用的,做前端开发的都知道SPA,通过唯一一个HTML页面完成所有组件的展示和切换,不同组件之间的切换需要通过路由来实现。vue-router是Vue的官方路由插件,为的就是Vue单页面开发的路由,处理页面跳转的,那么本篇博文就来分享一下关于vue-router相关的知识点,该知识点在前端求职面试中也是高频考察知识点,这里总结一下,方便查阅使用。

    vue-router概念

        router的中文释义为“路由”,它是计算机网络中非常重要的概念,表示分组从源到目的地时,决定端到端路径的网络范围的进程。换句话说,就是分组数据包从源到目的地,经历了哪些网络节点。在单页应用中,它表示页面的更新过程中所经历的路径变化。

           vue-router是Vue的路由管理器,它是Vue的核心插件,与Vue.js核心深度集成,让使用Vue.js构建单页应用程序变得轻而易举,vue-router就是Vue框架下管理如何进行页面替换和更新的组件。

          vue-router是基于路由和组件:路由用户设定访问路径,将路径和组件映射起来;在vue-router的单页面应用中,页面的路径改变就是组件的切换。

    vue-router特点

       vue-router对特点主要包括以下几点:

    • 嵌套路线映射
    • 动态路由
    • 基于组件的模块化路由器配置
    • 路由参数、查询、通配符
    • 查看由Vue.js的过渡系统提供支持的过渡效果
    • 细粒度导航控制
    更多相关内容
  • vue-router-sitemap通过vue-router配置安装npm i --save vue-router-sitemap示例用法// router.js import VueRout vue-router-sitemap通过vue-router配置生成sitemap.xml安装npm我-保存vue-router-sitemap示例用法//...
  • 注意:vue-router 2只适用于Vue2.x版本,...import VueRouter from 'vue-router' import App from './App.vue' Vue.use(VueRouter) 1.定义组件,这里使用从其他文件import进来 import index from './components/inde
  • vue-router3.0.1.js.zip

    2019-08-04 17:00:36
    这是Vue框架的已经js库,现在在网上比较难找到,在这里分享给大家使用。。
  • vue-router.js 3.0.1 版本

    2018-04-17 09:57:50
    vue-router 3.0.1 版本 , 2018-04-05 最新版本 .
  • vuevue-Router 常见面试题

    千次阅读 2022-05-01 10:09:25
    文章目录【vuevue-Router 常见面试题一、vue-Router基本使用二、常见面试题1.vue-router 路由钩子函数是什么 执行顺序是什么2. vue-router 动态路由是什么 有什么问题(1) params 方式(2) query 方式(3) params 和 ...

    【vue】vue-Router 常见面试题

    写在前面

    这里是小飞侠Pan🥳,立志成为一名优秀的前端程序媛!!!

    本篇博客收录于我的github前端笔记仓库中,持续更新中,欢迎star~

    👉https://github.com/mengqiuleo/myNote


    一、vue-Router基本使用

    前端路由是什么?

    前端路由是在保证只有一个HTML页面的情况下,通过对每个视图展示形式匹配一个特殊的url来实现所谓的切换效果。不会重新向服务端发送请求,也不会跳转页面。无论是刷新、前进、还是后退,都可以通过特殊url实现。

    1.点击这里👉vue-router使用

    2.导航守卫的使用:导航守卫


    二、常见面试题


    1.vue-router 路由钩子函数是什么 执行顺序是什么

    钩子函数种类有:全局守卫、路由守卫、组件守卫

    • 全局前置/钩子:beforeEach、beforeResolve、afterEach
    • 路由独享的守卫:beforeEnter
    • 组件内的守卫:beforeRouteEnter、beforeRouteUpdate、beforeRouteLeave

    完整的导航解析流程:

    1. 导航被触发。
    2. 在失活的组件里调用 beforeRouteLeave 守卫。
    3. 调用全局的 beforeEach 守卫。
    4. 在重用的组件里调用 beforeRouteUpdate 守卫 (2.2+)。
    5. 在路由配置里调用 beforeEnter。
    6. 解析异步路由组件。
    7. 在被激活的组件里调用 beforeRouteEnter。
    8. 调用全局的 beforeResolve 守卫 (2.5+)。
    9. 导航被确认。
    10. 调用全局的 afterEach 钩子。
    11. 触发 DOM 更新。
    12. 调用 beforeRouteEnter 守卫中传给 next 的回调函数,创建好的组件实例会作为回调函数的参数传入。

    2. vue-router 动态路由是什么 有什么问题

    例如,我们有一个 User 组件,对于所有 ID 各不相同的用户,都要使用这个组件来渲染。那么,我们可以在 vue-router 的路由路径中使用“动态路径参数”(dynamic segment) 来达到这个效果:

    const User = {
      template: "<div>User</div>",
    };
    
    const router = new VueRouter({
      routes: [
        // 动态路径参数 以冒号开头
        { 
        	path: "/user/:id", 
        	component: User 
        },
      ],
    });
    
    

    (1) params 方式

    • 配置路由格式:/router/:id
    • 传递的方式:在path后面跟上对应的值
    • 传递后形成的路径:/router/123

    1)路由定义

    //在APP.vue中
    <router-link :to="'/user/'+userId" replace>用户</router-link>    
    
    //在index.js
    {
       path: '/user/:userid',
       component: User,
    },
    复制代码
    

    2)路由跳转

    // 方法1:
    <router-link :to="{ name: 'users', params: { uname: wade }}"> 按钮 </router-link>
    
    // 方法2:
    this.$router.push({name:'users',params:{uname:wade}})
    
    // 方法3:
    this.$router.push('/user/' + wade)
    复制代码
    

    3)参数获取 通过 this.$route.params.userid 获取传递的值


    (2) query 方式

    • 配置路由格式:/router,也就是普通配置
    • 传递的方式:对象中使用query的key作为传递方式
    • 传递后形成的路径:/route?id=123

    1)路由定义

    //方式1:直接在router-link 标签上以对象的形式
    <router-link :to="{path:'/profile',query:{name:'why',age:28,height:188}}">档案</router-link>
    
    // 方式2:写成按钮以点击事件形式
    <button @click='profileClick'>我的</button>    
    
    profileClick(){
      this.$router.push({
        path: "/profile",
        query: {
            name: "kobi",
            age: "28",
            height: 198
        }
      });
    }
    复制代码
    

    2)跳转方法

    // 方法1:
    <router-link :to="{ name: 'users', query: { uname: james }}">按钮</router-link>
    
    // 方法2:
    this.$router.push({ name: 'users', query:{ uname:james }})
    
    // 方法3:
    <router-link :to="{ path: '/user', query: { uname:james }}">按钮</router-link>
    
    // 方法4:
    this.$router.push({ path: '/user', query:{ uname:james }})
    
    // 方法5:
    this.$router.push('/user?uname=' + jsmes)
    复制代码
    

    3)获取参数

    通过this.$route.query 获取传递的值
    

    (3) params 和 query 的区别

    • 对于 query:

    name 和 path 都可以用,

    <router-link :to="{ name: 'W', query: { id:'1234',age:'12' }}"/>
    <router-link :to="{ path: '/W', query: { id:'1234',age:'12' }}"/>
    
    • 对于 params:

    只能用 name,

    <router-link :to="{ name: 'W', params: { id:'1234',age:'12' }}"/>
    

    总结

    用法:query要用path来引入,params要用name来引入,接收参数都是类似的,分别是 this.$route.query.namethis.$route.params.name

    url地址显示:query更加类似于ajax中get传参,params则类似于post,说的再简单一点,前者在浏览器地址栏中显示参数,后者则不显示

    注意:query刷新不会丢失query里面的数据 params刷新会丢失 params里面的数据。


    3.$route 和 $router 的区别

    • $router为VueRouter实例,想要导航到不同URL,则使用$router.push方法
    • $route为当前router跳转对象,里面可以获取name、path、query、params等

    4.Vue-Router 的懒加载如何实现

    路由懒加载的含义:

    把不同路由对应的组件分割成不同的代码块,然后当路由被访问的时候才加载对应组件

    const List = () => import('@/components/list.vue')
    
    const router = new VueRouter({
      routes: [
        { path: '/list', component: List }
      ]
    })
    

    5.vue-router 中常用的路由模式

    hash 模式

    1. location.hash 的值实际就是 URL 中#后面的东西 它的特点在于:hash 虽然出现 URL 中,但不会被包含在 HTTP 请求中,对后端完全没有影响,因此改变 hash 不会重新加载页面。

    2. 可以为 hash 的改变添加监听事件

    window.addEventListener("hashchange", funcRef, false);
    

    每一次改变 hash(window.location.hash),都会在浏览器的访问历史中增加一个记录利用 hash 的以上特点,就可以来实现前端路由“更新视图但不重新请求页面”的功能了

    特点:兼容性好但是不美观


    history 模式

    利用了 HTML5 History Interface 中新增的 pushState() 和 replaceState() 方法。

    这两个方法应用于浏览器的历史记录站,在当前已有的 back、forward、go 的基础之上,它们提供了对历史记录进行修改的功能。这两个方法有个共同的特点:当调用他们修改浏览器历史记录栈后,虽然当前 URL 改变了,但浏览器不会刷新页面,这就为单页应用前端路由“更新视图但不重新请求页面”提供了基础。

    特点:虽然美观,但是刷新会出现 404 需要后端进行配置(一般是将页面配置重定向到首页路由)

    总结

    hash模式是开发中默认的模式,如果想要切换到history模式,就要进行以下配置(后端也要进行配置):

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

    6.编程式路由导航 与 声明式路由导航


    编程式路由导航 --> 即写 js 的方式

    相关 API:

    1) this.$router.push(path):

    相当于点击路由链接(可以返回到当前路由界面) --> 队列的方式(先进先出)

    2)this.$router.replace(path):

    用新路由替换当前路由(不可以返回到当前路由界面) --> 栈的方式(先进后出)

    3)this.$router.back():

    请求(返回)上一个记录路由

    4)this.$router.go(-1):

    请求(返回)上一个记录路由

    5) this.$router.go(1):

    请求下一个记录路由


    声明式路由导航 --> 即 <router-link>

    <router-link to='xxx' tag='li'>  To PageB  </router-link>
    

    注意:<router-link> 会默认解析成 a 标签,可以通过 tag 属性指定它解析成什么标签


    7.单页面应用的优缺点(SPA)

    单页面应用程序将所有的活动局限于一个Web页面中,在该Web页面初始化时加载相应的HTML、JavaScript 和 CSS。一旦页面加载完成,单页面应用不会因为用户的操作而进行页面的重新加载或跳转。取而代之的是利用 JavaScript 动态的变换HTML的内容,从而实现UI与用户的交互。由于避免了页面的重新加载,单页面应用可以提供较为流畅的用户体验。
    所谓的页面跳转,多个页面之间的切换是利用JS动态的变换HTML的内容,加载的时候不是加载整个页面,而是某个指定的容器中的内容。

    一个🌰:你有一个水杯,一会儿装的是可乐,一会儿装的是牛奶。


    单页面应用的优点

    • 良好的交互体验

    单页应用的内容的改变不需要重新加载整个页面,获取数据也是通过Ajax异步获取,没有页面之间的切换,就不会出现“白屏现象”,也不会出现假死并有“闪烁”现象,页面显示流畅

    • 良好的前后端工作分离模式

    后端不再负责模板渲染、输出页面工作,后端API通用化,即同一套后端程序代码,不用修改就可以用于Web界面、手机、平板等多种客户端

    • 减轻服务器压力

    单页应用相对服务器压力小,服务器只用出数据就可以,不用管展示逻辑和页面合成,吞吐能力会提高几倍


    缺点

    • 不会记住用户的操作记录

    • 首屏加载慢

    前端路由的重要的作用

    1、可以在改变url的时候不会向服务器发送请求。
    2、可以监听到url的改变。


    解决方案:

    • 1.vue-router懒加载

      Vue-router懒加载就是按需加载组件,只有当路由被访问时才会加载对应的组件,而不是在加载首页的时候就加载,项目越大,对首屏加载的速度提升得越明显

    • 2.使用CDN加速

      在做项目时,我们会用到很多库,采用cdn加载可以加快加载速度。

    • 3.异步加载组件

    • 4.服务端渲染

      服务端渲染还能对seo优化起到作用,有利于搜索引擎抓取更多有用的信息(如果页面纯前端渲染,搜索引擎抓取到的就只是空页面)

    • 不利于SEO

    seo 本质是一个服务器向另一个服务器发起请求,解析请求内容。但一般来说搜索引擎是不会去执行请求到的js的。也就是说,搜索引擎的基础爬虫的原理就是抓取url,然后获取html源代码并解析。 如果一个单页应用,html在服务器端还没有渲染部分数据数据,在浏览器才渲染出数据,即搜索引擎请求到的html是模型页面而不是最终数据的渲染页面。 这样就很不利于内容被搜索引擎搜索到

    解决方案:

    • 1.服务端渲染

      服务器合成完整的 html 文件再输出到浏览器

    • 2.页面预渲染

    • 3.路由采用h5 history模式

    展开全文
  • Vue基础知识总结 11:前端路由vue-router

    千次阅读 多人点赞 2021-10-06 17:11:44
    一、前端路由vue-router 1、维基百科 路由就是通过互联的网络把信息从源地址传输到目的地址的活动。 2、路由的机制 路由包括路由和转发。 路由器 -> 公网IP -> 映射表 -> 内网IP 映射表:[内网ip1:...

    🍅 作者简介:哪吒,CSDN2021博客之星亚军🏆、新星计划导师✌、博客专家💪

    🍅 哪吒多年工作总结:Java学习路线总结,搬砖工逆袭Java架构师

    🍅 关注公众号【哪吒编程】,回复1024,获取Java学习路线思维导图、大厂面试真题、加入万粉计划交流群、一起学习进步

    目录

    ​一、前端路由vue-router

    1、维基百科

    2、路由的机制

    3、后端渲染

    4、后端路由阶段

    ​5、前后端分离

    6、单页面富应用阶段

    7、SPA页面

    8、前端路由

    二、改变URL,但是页面不进行整体的刷新

    ​1、URL的hash

    2、HTML5的history 

    三、安装和使用vue-router

    1、安装vue-router

    2、在模块化工程中使用它(因为它是一个插件,所以可以通过Vue.use()来安装路由功能)

    3、使用vue-router的步骤

    4、router-link与router-view

    5、vue-router代码实例

     四、router-link的其它属性补充

    五、vue-router动态路由的使用

    六、vue-router打包文件的解析

    七、路由懒加载

    1、什么是懒加载

    2、懒加载的方式

    3、代码实例

    八、路由嵌套

    1、嵌套路由是一个很常见的功能

    2、实现嵌套路由的两个步骤

     3、嵌套路由代码实例

    九、vue-router参数传递

    1、传递参数主要有两种类型: params和query

    2、代码实例

    十、vue-router全局导航守卫

    1、生命周期函数

    2、前置守卫

    十一、keep-alive与vue-router


    ​一、前端路由vue-router

    1、维基百科

    路由就是通过互联的网络把信息从源地址传输到目的地址的活动。

    2、路由的机制

    路由包括路由和转发。
    路由器 -> 公网IP -> 映射表 -> 内网IP
    映射表:[内网ip1:电脑标识1,内网ip2:电脑标识2]

    3、后端渲染

    JSP:java server page
    后端渲染 == html + css + java
    java代码的作用是从数据库中读取数据,然后将他们动态的放在页面中。
    后端渲染的意思就是,前端请求后端,页面的数据在后端已经渲染好了,然后再返回前端,内容包括HTML+css,当然是包含数据的HTML。
    后端路由:后端处理URL和页面之间的映射关系。

    4、后端路由阶段

    早期的网站开发整个HTML页面是由服务器来渲染的。
    服务器直接生产渲染好对应的HTML页面, 返回给客户端进行展示。

    但是, 一个网站, 这么多页面服务器如何处理呢?

    1. 一个页面有自己对应的网址, 也就是URL。
    2. URL会发送到服务器, 服务器会通过正则对该URL进行匹配, 并且最后交给一个Controller进行处理。
    3. Controller进行各种处理, 最终生成HTML或者数据, 返回给前端。
    4. 这就完成了一个IO操作。

    上面的这种操作, 就是后端路由:

    • 当我们页面中需要请求不同的路径内容时, 交给服务器来进行处理, 服务器渲染好整个页面, 并且将页面返回给客户顿。
    • 这种情况下渲染好的页面, 不需要单独加载任何的js和css, 可以直接交给浏览器展示, 这样也有利于SEO的优化。 

    后端路由的缺点:

    1. 一种情况是整个页面的模块由后端人员来编写和维护的。
    2. 另一种情况是前端开发人员如果要开发页面, 需要通过PHP和Java等语言来编写页面代码。
    3. 而且通常情况下HTML代码和数据以及对应的逻辑会混在一起, 编写和维护都是非常糟糕的事情。

    ​5、前后端分离

    后端只负责提供数据,不负责其它任何阶段。
    浏览器中显示的网页中的大部分内容,都是由前端写的JS代码在浏览器中执行,最终渲染出来的网页。

    随着Ajax的出现, 有了前后端分离的开发模式。

    后端只提供API来返回数据, 前端通过Ajax获取数据, 并且可以通过JavaScript将数据渲染到页面中。

    这样做最大的优点就是前后端责任的清晰, 后端专注于数据上, 前端专注于交互和可视化上。
    并且当移动端(iOS/Android)出现后, 后端不需要进行任何处理, 依然使用之前的一套API即可。
    目前很多的网站依然采用这种模式开发。

    6、单页面富应用阶段

    其实SPA最主要的特点就是前后端分离的基础上加上了一层前端路由;
    也就是前端来维护一套路由规则

    7、SPA页面

    SPA:单页富应用
    整个网页只有一个HTML网页。

    8、前端路由

    URL和前端页面的映射关系。
    -----> vue router

    前端路由的核心是什么呢?
    改变URL,但是页面不进行整体的刷新。

    二、改变URL,但是页面不进行整体的刷新

    ​1、URL的hash

    URL的hash也就是锚点,本质上是改变window.location的href属性。
    我们可以通过直接赋值location.hash来改变href,但是页面不发生刷新。

    2、HTML5的history 

    history.pushState({},'','home')

    history.pushState相当于栈的操作,先进后出,弹栈和入栈的操作。

    history.pushState入栈;

    history.back()出栈;

    history.go(-1)  相当于 history.back();

    history.forward 相当于history.go(1);

    history.replaceState():不能返回;

    三、安装和使用vue-router

    1、安装vue-router

    npm install vue-router --save

    2、在模块化工程中使用它(因为它是一个插件,所以可以通过Vue.use()来安装路由功能)

    1. 导入路由对象,并且调用Vue.use(VueRouter)
    2. 创建路由实例,并传入路由映射配置
    3. 在Vue实例中挂载创建的路由实例

    3、使用vue-router的步骤

    1. 创建路由组件
    2. 配置路由映射,组件和路径映射关系
    3. 使用路由:通过<router-link>和<router-view>

    4、router-link与router-view

    <router-link>:该标签是一个vue-router中已经内置的组件,它会被渲染成一个<a>标签。
    <router-view>:该标签会根据当前的路径,动态渲染出不同的组件。
    网页的其他内容,比如顶部的标题/导航,或者底部的一些版权信息等会和<router-view>处于同一个等级。
    在路由切换时,切换的是<router-view>挂载的组件,其他内容不会发生改变。

    5、vue-router代码实例

    (1)App.vue

    <template>
      <div id="app">
        <router-link to="/home" >首页</router-link>
        <router-link to="/about">关于</router-link>
        <router-view></router-view>
      </div>
    </template>
    
    <script>
    export default {
      name: 'App'
    }
    </script>
    

    (2)Home.vue

    <template>
      <div>
        <h2>我是首页</h2>
        <p>我是首页内容, 哈哈哈</p>
      </div>
    </template>
    
    <script>
      export default {
        name: "Home"
      }
    </script>
    
    <style scoped>
    
    </style>
    

    (3)About.vue

    <template>
      <div>
        <h2>我是关于</h2>
        <p>我是关于内容, 呵呵呵</p>
      </div>
    </template>
    
    <script>
      export default {
        name: "About"
      }
    </script>
    
    <style scoped>
    
    </style>
    

    (4)main.js

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

    (5)index.js

    // 配置路由相关的信息
    import VueRouter from 'vue-router'
    import Vue from 'vue'
    
    import Home from '../components/Home'
    import About from '../components/About'
    
    // 1.通过Vue.use(插件), 安装插件
    Vue.use(VueRouter)
    
    // 2.创建VueRouter对象
    const routes = [
      {
        path: '',
        // redirect重定向
        redirect: '/home'
      },
      {
        path: '/home',
        component: Home
      },
      {
        path: '/about',
        component: About
      }
    ]
    const router = new VueRouter({
      // 配置路由和组件之间的应用关系
      routes,
      mode: 'history',
      linkActiveClass: 'active'
    })
    
    // 3.将router对象传入到Vue实例
    export default router
    
    

    (6)浏览器展示

     四、router-link的其它属性补充

    1. tag:tag可以指定router-link之后渲染成什么组件,比如<router-link tag='button'></router-link>,此时就是一个button了;
    2. replace:增加replace属性,就相当于replaceState;
    3. class:可以为标签增加样式,比如选中的会自动赋值router-link-active;
    4. active-class=“active”:选中的;也可以在router组件中配置linkActiveClass: 'active';

    通过代码跳转路由:

    <script>
    export default {
      name: 'App',
      methods: {
        homeClick() {
          // 通过代码的方式修改路由 vue-router
          // push => pushState
          this.$router.push('/home')
          //this.$router.replace('/home')
          console.log('homeClick');
        },
        aboutClick() {
          this.$router.push('/about')
          //this.$router.replace('/about')
          console.log('aboutClick');
        }
      }
    }
    </script>

    五、vue-router动态路由的使用

    在某些情况下,一个页面的path路径可能是不确定的,比如我们进入用户界面时,希望路径中存在用户id,这种path和Component相互匹配的关系,我们称之为动态路由,也是路由传递数据的一种方式。

    this.$route表示正在活跃的路由。

    获取路径中的姓名:

    ...
    <router-link :to="'/user/'+userId">用户</router-link>
    ...
    <template>
      <div>
        <h2>我是用户界面</h2>
        <p>我是用户的相关信息, 嘿嘿嘿</p>
        <h2>{{userId}}</h2>
        <h2>{{$route.params.id}}</h2>
        <button @click="btnClick">按钮</button>
      </div>
    </template>
    
    <script>
      export default {
        name: "User",
        computed: {
          userId() {
            return this.$route.params.id
          }
        }
    </script>

    六、vue-router打包文件的解析

    七、路由懒加载

    1、什么是懒加载

    当打包构建应用时,JavaScript包会变得非常大,影响页面加载。

    如果我们能吧不同路由对应的组件分割成不同的代码块,然后当路由被访问的时候才加载对应组件,这样就更加高效了。

    2、懒加载的方式

    (1)结合Vue的异步组件和Webpack的代码分析

    const Home = resolve => { require.ensure(['../components/Home.vue'], 
    () => { resolve(require('../components/Home.vue')) })};
    

    (2)amd写法

    const About = resolve => require(['../components/About.vue'], resolve);
    

    (3)ES6我们可以有更加简单的写法来组织Vue异步组件和Webpack的代码分割

    const Home = () => import('../components/Home.vue')
    

    3、代码实例

    index.js

    // import Home from '../components/Home'
    // import About from '../components/About'
    // import User from '../components/User'
    
    // 懒加载方式
    const Home = () => import('../components/Home')
    const About = () => import('../components/About')
    const User = () => import('../components/User')

    八、路由嵌套

    1、嵌套路由是一个很常见的功能

    比如在home页面中,我们希望通过/home/news和/home/message访问一些内容;

    一个路径映射一个组件,访问这两个路径也分别渲染这两个组件;

    2、实现嵌套路由的两个步骤

    1. 创建对应的子组件,并且在路由映射中配置对应的子路由;
    2. 在组件内部使用<router-view>标签;

     3、嵌套路由代码实例

    (1)index.js

    // 配置路由相关的信息
    import VueRouter from 'vue-router'
    import Vue from 'vue'
    
    const Home = () => import('../components/Home')
    const HomeNews = () => import('../components/HomeNews')
    const HomeMessage = () => import('../components/HomeMessage')
    
    const About = () => import('../components/About')
    const User = () => import('../components/User')
    const Profile = () => import('../components/Profile')
    
    // 1.通过Vue.use(插件), 安装插件
    Vue.use(VueRouter)
    
    // 2.创建VueRouter对象
    const routes = [
      {
        path: '',
        // redirect重定向
        redirect: '/home'
      },
      {
        path: '/home',
        component: Home,
        meta: {
          title: '首页'
        },
        children: [
          {
            path: 'news',
            component: HomeNews
          },
          {
            path: 'message',
            component: HomeMessage
          }
        ]
      }
    ]
    const router = new VueRouter({
      // 配置路由和组件之间的应用关系
      routes,
      mode: 'history',
      linkActiveClass: 'active'
    })
    
    // 3.将router对象传入到Vue实例
    export default router
    
    

    (2)Home.vue

    <template>
      <div>
        <h2>我是首页</h2>
        <p>我是首页内容, 哈哈哈</p>
    
        <router-link to="/home/news">新闻</router-link>
        <router-link to="/home/message">消息</router-link>
    
        <router-view></router-view>
    
        <h2>{{message}}</h2>
      </div>
    </template>
    
    <script>
      export default {
        name: "Home",
        data() {
          return {
            message: '你好啊',
            path: '/home/news'
          }
        }
      }
    </script>
    
    <style scoped>
    
    </style>
    

    (3)HomeNews.vue

    <template>
      <div>
        <ul>
          <li>美女1</li>
          <li>美女2</li>
          <li>美女3</li>
          <li>美女4</li>
        </ul>
      </div>
    </template>
    
    <script>
      export default {
        name: "HomeNews"
      }
    </script>
    
    <style scoped>
    
    </style>
    

    九、vue-router参数传递

    1、传递参数主要有两种类型: params和query

    params的类型:

    1. 配置路由格式: /router/:id
    2. 传递的方式: 在path后面跟上对应的值
    3. 传递后形成的路径: /router/123, /router/abc

    query的类型:

    1. 配置路由格式: /router, 也就是普通配置
    2. 传递的方式: 对象中使用query的key作为传递方式
    3. 传递后形成的路径: /router?id=123, /router?id=abc
       

    2、代码实例

    (1)传值

    <script>
    ...
    export default {
      ...
      methods: {
        userClick() {
          this.$router.push('/user/' + this.userId)
        },
        profileClick() {
          this.$router.push({
            path: '/profile',
            query: {
              name: 'kobe',
              age: 19,
              height: 1.87
            }
          })
        }
      }
    }
    </script>

    (2)取值

    <template>
      <div>
        <h2>{{$route.query.name}}</h2>
        <h2>{{$route.query.age}}</h2>
        <h2>{{$route.query.height}}</h2>
      </div>
    </template>
    

    十、vue-router全局导航守卫

    1、生命周期函数

    <script>
      export default {
        name: "Home",
        data() {
          return {
            message: '你好啊',
            path: '/home/news'
          }
        },
        created() {
          console.log('home created');
        },
        destroyed() {
          console.log('home destroyed');
        },
        // 这两个函数, 只有该组件被保持了状态使用了keep-alive时, 才是有效的
        activated() {
          this.$router.push(this.path);
          console.log('activated');
        },
        deactivated() {
          console.log('deactivated');
        },
        beforeRouteLeave (to, from, next) {
          console.log(this.$route.path);
          this.path = this.$route.path;
          next()
        }
      }
    </script>

    2、前置守卫

    (1)动态修改标题

    跳转前回调

    // 前置守卫(guard)
    router.beforeEach((to, from, next) => {
      // 从from跳转到to
      document.title = to.matched[0].meta.title
      // 必须调用next(),表示执行下一步的意思
      next()
    })
    

    (2)beforeEach源码分析:

     (3)跳转后回调

    // 后置钩子(hook)
    router.afterEach((to, from) => {
      // console.log('--我是CSDN哪吒--');
    })

    十一、keep-alive与vue-router

    keep-alive是vue内置的一个组件,可以使被包含的组件保留状态,或避免重新渲染。

    router-view也是一个组件,如果直接被包在keep-alive里面,所有路径匹配到的试图组件都会被缓存。

    🍅 作者简介:哪吒,CSDN2021博客之星亚军🏆、新星计划导师✌、博客专家💪

    🍅 哪吒多年工作总结:Java学习路线总结,搬砖工逆袭Java架构师

    🍅 关注公众号【哪吒编程】,回复1024,获取Java学习路线思维导图、大厂面试真题、加入万粉计划交流群、一起学习进步

     关注公众号,回复1024,获取Java学习路线思维导图、加入万粉计划交流群

    展开全文
  • 最近因为业务需要,实现了一个简单的前端 router,正好也来看一下 vue router ...import VueRouter from 'vue-router'; 利用 vue 的插件机制,加载 vue-router: Vue.use(VueRouter); 实例化 VueRouter: const rout
  • vue-router 详解

    万次阅读 多人点赞 2021-01-16 12:15:20
    文章目录1、认识vue-router2、安装和使用vue-router 1、认识vue-router 目前前端流行的三大框架,都有自己的路由实现: Angular的ngRouter React的ReactRouter Vuevue-router vue-routerVue.js官方的路由插件...


    1、认识vue-router

    目前前端流行的三大框架,都有自己的路由实现:

    • Angular的ngRouter
    • React的ReactRouter
    • Vue的vue-router

    vue-router是Vue.js官方的路由插件,它和vue.js是深度集成的,适合用于构建单页面应用。
    我们可以访问其官方网站对其进行学习:https://router.vuejs.org/zh/

    vue-router是基于路由和组件的

    • 路由用户设定访问路径的,将路径和组件映射起来。
    • 在vue-router的单页面应用中,页面的路径的改变就是组件的切换

    2、安装和使用vue-router

    第一步:安装vue-router
    npm install vue-router --save

    第二步:在模块化工程中使用它(因为是一个插件,所以可以通过Vue.use()来安装路由功能)

    • 导入路由对象,并且调用Vue.use(VueRouter)
    • 创建路由实例,并且传入路由映射配置
    • 在Vue实例中挂载创建的路由实例

    使用vue-router的步骤:

    • 第一步:创建路由组件
    • 第二步:配置路由映射:组件和路径映射关系
    • 第三步:使用路由:通过<router-link><router-view>

    代码实现步骤:

    • 创建router实例
      在这里插入图片描述
    • 挂载到Vue实例中
      在这里插入图片描述
    • 第一步:创建路由组件
      在这里插入图片描述
    • 第二步:配置组件和路由的映射关系
      在这里插入图片描述
    • 第三步:使用路由
      在这里插入图片描述
      <router-link>:该标签是一个vue-router中已经内置的组件,他会被渲染成一个<a>标签。
      <router-view>:该标签会根据当前的路径,动态渲染出不同的组件。

    3、路由的默认路径

    默认情况下,进入网站的首页,我们希望渲染首页的内容。
    但是我们的实现中,默认没有显示首页组件,必须让用户点击才可以。

    如何可以让路径默认跳转到首页,并且渲染首页组件呢?
    我们需要多配置一个映射就可以了

    {
      path: '/',
      redirect: '/home'
    },
    

    配置解析:

    • 我们在routes中又配置一个映射
    • path配置的是根路径:/
    • redirect是重定向,也就是我们将根路径重定向到/home的路径下,这样就可以得到我们想要的结果了。

    4、HTML5的History模式

    改变路径的方式有两种:

    • URL 的 hash
    • HTML5 的 history
    • 默认情况下,路径的改变使用的URL的 hash

    如果希望使用HTML5的history模式,进行如下的配置:

    在这里插入图片描述

    5、router-link属性介绍

    • to:用于指定跳转的路径
    • tag:tag可以指定<router-link>之后渲染成什么组件,比如我们下面的代码会被渲染成一个<li>元素,而不是<a> 。 如:<router-link to='/home' tag='li'>
    • replace:replace不会留下history记录,所以指定replace的情况下,后退键返回不能返回到上一个页面中
    • active-class:当<router-link>对应的路由匹配成功时,会自动给当前元素设置一个router-link-active的class,设置active-class可以修改默认的名称。

    6、路由代码跳转

    有的时候,页面的跳转可能需要执行相应的JavaScript代码,这个时候,就可以使用第二种跳转方式了。

    比如我们将代码修改如下:

    在这里插入图片描述

    7、动态路由

    在某些情况下,一个页面的path路径可能是不确定的,比如我们进入用户界面时,希望是如下的路径:

    • /user/aaa或/user/bbb
    • 除了有前面的/user之外,后面还跟上了用户的ID
    • 这种path和Component的匹配关系,我们称之为动态路由(也是路由传递数据的一种方式)
      在这里插入图片描述

    8、路由懒加载

    路由懒加载的方式

    • 方式一:结合Vue的异步组件和Webpack的代码分析
      const Home = resolve => { require. ensure(['../ components/Home.vue'], () => { resolve(require('../ components/Home.vue')) })};
    • 方式二:AMD写法
      const About = resolve => require([' ../ components/ About.vue'], resolve);
    • 方式三:在ES6中,我们可以有更加简单的写法来组织Vue异步组件和Webpack的代码分割
      const Home = () => import(' . ./ components/Home.vue ' )

    路由懒加载的效果
    在这里插入图片描述

    9、嵌套路由实现

    在这里插入图片描述

    10、传递参数的方式

    传递参数主要有两种类型:params和query

    • params的类型:
      • 配置路由格式:/router/:id
      • 传递的方式:在path后面跟上对应的值
      • 传递后形成的路径:/router/123,/router/abc
    • query的类型:
      • 配置路由格式:/router,也就是普通配置
      • 传递的方式:对象中使用query的key作为传递方式
      • 传递后形成的路径:/router?id= 123,/router?id=abc

    11、导航守卫的使用

    我们可以利用beforeEach来完成标题的修改

    • 首先,我们可以在钩子当中定义一些标题,可以利用mate来定义
    • 其次,利用导航守卫修改我们的标题

    导航钩子的三个参数解析:

    • to:即将要进入的目标的路由对象
    • from:当前导航即要离开的路由对象
    • next:调用该方法后,才能进入下一个钩子

    在这里插入图片描述
    如果是后置钩子,也就是afterEach,不需要主动调用next()函数。

    上面我们使用的导航守卫,被称之为全局守卫。

    12、TabBar实现思路

    1. 如果在下方有两个单独的TabBar组件,你如何封装
      自定义TabBar组件,在APP中使用
      让TabBar处于底部,并且设置相关的样式
    2. TarBar中显示的内容由外界决定
      定义插槽
      flex布局平分TabBar
    3. 自定义TarBarItem,可以传入图片和文字
      定义TabBarItem,并且定义两个插槽:图片、文字。
      给两个插槽外层包装div,用于设置样式。
      填充插槽,实现底部TabBar的效果。
    4. 传入高亮图片
      定义另外一个插槽,插入active-icon的数据
      定义一个变量isActive,通过v-show来决定是否显示对应的icon
    5. TabBarItem绑定路由数据
      安装路由:npm install vue-route --save
      完成router/index.js的内容,以及创建对应的组件
      main.js中注册router
      APP中加入<router-view>组件
    6. 点击item跳转到对应路由,并且动态决定isActive
      监听item的点击,通过this.$router.replace()替换路由路径
      通过this.$route.path.indexOf(this.link) !== -1来判断是否是active
    7. 动态计算active样式
      封装新的计算属性:this.isActive ? {'color': 'red'}:{}

    效果图:

    在这里插入图片描述


    如果有收获!!! 希望老铁们来个三连,点赞、收藏、转发。
    创作不易,别忘点个赞,可以让更多的人看到这篇文章,顺便鼓励我写出更好的博客
    展开全文
  • vuevue-router的使用

    千次阅读 2022-04-21 16:49:52
    一、什么是vue-router Vue RouterVue.js的官方路由。它与 Vue.js 核心深度集成,让用 Vue.js 构建单页应用变得轻而易举。用 Vue + Vue Router 创建单页应用非常简单:通过 Vue.js,我们已经用组件组成了我们的...
  • Vue路由——vue-router

    千次阅读 2022-01-27 23:18:11
    前端路由与后端路由 路由 路由(routing):指从源到目的地时,决定端到端路径的决策过程。 路由分为两大类:前端路由和后端...const router=express.Router() router.get('/login',function(req,res){ 路由的处理函数
  • vue-router-nav呈现vue-router路由的简约响应式导航栏。 观看演示。 依赖关系您需要拥有vue-router insta vue-router-nav简约的响应式导航栏,用于呈现vue-router的路由。 观看演示。 依赖关系您需要安装vue-router...
  • Vue-router路由转发

    千次阅读 2022-04-24 11:40:05
    vue-router路由转发
  • Vue路由(vue-router)详细讲解

    千次阅读 2022-03-10 15:25:19
    Vue RouterVue.js官方的路由管理器。它和 Vue.js 的核心深度集成,让构建单页面应用变得易如反掌。路由实际上就是可以理解为指向,就是我在页面上点击一个按钮需要跳转到对应的页面,这就是路由跳转; 首先我们...
  • Vue路由(vue-router)详细讲解指南

    万次阅读 多人点赞 2022-01-19 10:21:49
    Vue RouterVue.js 官方的路由管理器。它和 Vue.js 的核心深度集成,让构建单页面应用变得易如反掌。路由实际上就是可以理解为指向,就是我在页面上点击一个按钮需要跳转到对应的页面,这就是路由跳转; 首先我们...
  • 看视频的时候发现vue3的一些基础配置代码有变,比如出使用createApp,app.use(),app.mount(’#app’)等,跟我现在的vue2 new Vue以及vue-router的方法上都有不同,我一直以为自己是vue3,本着追求新事物的想法,下午...
  • Vue-router的使用(vue3.0版本)

    千次阅读 2021-08-20 15:17:47
    vue-router 使用过程一级目录二级目录三级目录 一级目录 vue-router有三个概念 route, routes, router。 1, route,一条路由,它是单数,点击内容后跳转到指定内容,index按钮 => index内容, 这是一条route, ...
  • VUEvue-router常见面试题

    千次阅读 多人点赞 2021-01-15 10:42:50
    1.vue-router怎么重定向的? 在routes:[{{ path: '/a'...答:vue-router模块的router-link组件。children数组来定义子路由 4.怎么定义 vue-router 的动态路由? 怎么获取传过来的值?怎么获取当前的路由信息? 答:在
  • vue2安装vue-router

    千次阅读 多人点赞 2022-02-16 14:53:15
    vue2中安装vue-router 问题描述: 提示:在安装过程中报错,缺少依赖: PS D:\WebDeplpyer\workspace\Vue_Basic\vue_test> npm i vue-router npm ERR! code ERESOLVE npm ERR! ERESOLVE unable to resolve ...
  • Vue-router参考手册.CHM

    2016-11-21 21:19:07
    Vue-router中文教程,Vue-router参考手册.CHM, Vue-router离线手册
  • 2.4 VueRouter-install 运行时版本: 不支持template模版,需要打包的时候提前编译。 完整版本: 包含运行时和编译器,体积比运行时版大10k左右,程序运行的时候把模版转换成render函数。 Vue-Router.js console....
  • 那就是路由vue-router,以及数据请求axios了。 axios的用法与vue2的差别不大,就是一些ts的语法问题,所以也就不对axios的用法做介绍了,本篇来介绍下vue-router路由的使用。 本篇也不从创建项目开始了,对vite+vue...
  • vue路由(vue-router)面试题

    千次阅读 多人点赞 2020-11-17 12:00:48
    MVVMMVCMVPMVVM模式的优点以及与MVC模式的区别2.vue-router 是什么?它有哪些组件3.active-class 是哪个组件的属性?active-class使用方法4.怎么定义 vue-router 的动态路由? 怎么获取传过来的值获取传过来的值5.vue-...
  • vue3.0,vue-router的简单使用

    千次阅读 2022-03-30 16:36:10
    vue3.0,vue-router
  • vue3.0的路由(vue-router)
  • vue-router 如何实现支持外部链接

    千次阅读 2022-04-18 12:47:21
    vue-router 扩展 自动跳转外链
  • Vue全家桶系列之Vue-router(二)

    千次阅读 2021-09-03 22:56:06
    上篇文章说下下两种路由各自的原理及优缺点,那么这篇文章来开始真正的vue-router学习! 文章目录1.前言2.一个最简单的路由例子 2.一个最简单的路由例子 我们用之前vue-cli脚手架创建的项目来做例子,可以利用vue单...
  • Cs }] } ] const router = new VueRouter({ routes }) export default router 3、Course.js 将二级页面显示 <template> <nav> <router-link to="/html">HTML</router-link> | <router-link to="/css">CSS</router-...
  • vue项目中引入vue-router

    千次阅读 2021-09-02 09:21:19
    大白话攻破VueRouter重点知识 继续往下就是在vue项目中实战操作了 搭建一个vue项目这里不多赘述,简单过一下: vue create newtest cd newtest npm run serve 此时vue-cli已经帮助搭建一个简单的vue架子了,但其中...
  • vue-router 安装报错

    千次阅读 2022-04-16 08:18:40
    vue 安装路由组件 vue-router报错,版本不匹配,could not resolve denendency

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 229,780
精华内容 91,912
关键字:

vue-router