Vue-route核心知识整理

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

目录

1 相关理解

1.1 对 vue-router 的理解

1.2 对 SPA 应用的理解

1.3 对路由的理解

1.3.1 什么是路由?

1.3.2 路由的分类

2 几个注意点

3 路由的基本使用

4 嵌套 (多级) 路由

5 路由传参

5.1 query 方式传参

5.1.1 跳转路由并携带query参数, to的字符串写法

5.1.2 跳转路由并携带query参数, to的对象写法

5.2 给路由命名

5.3 params方式传参

5.3.1 跳转路由并携带params参数, to的字符串写法

5.3.2 跳转路由并携带params参数, to的对象写法

5.4 props配置,实现传参

5.4.1 props配置方式1

5.4.2 props配置方式2

5.4.3 props配置方式3

6 路由的replace属性

7 路由的编程式导航

8 缓存路由组件

9 两个新的生命周期钩子

10 全局路由守卫(前置和后置路由守卫)

11 独享路由守卫

12 组件内守卫

13 路由的两种工作模式


1 相关理解

1.1 对 vue-router 的理解

是vue的一个插件库,专门用来实现SPA应用

1.2 对 SPA 应用的理解

1. 单页Web应用 (Single Page Web Application,  SPA)

2.  整个应用只有一个完整的页面

3. 点击页面的导航链接不会刷新页面,只会作页面的局部刷新

4. 数据需要通过 ajax请求获取

1.3 对路由的理解

1.3.1 什么是路由?

1. 一个路由就是一组映射关系 (key-value)

2. key为路径,value可能是function 或者 component

1.3.2 路由的分类

【1】后端路由

1)理解:value就是function,用于处理客户端提交的请求

2)工作过程:服务器接收到一个请求,根据请求的路径找到匹配的函数来处理请求,并返回响应的数据

【2】前端路由

1)理解:value就是component,用于展示页面内容

2)工作过程:当浏览器的路径发生改变时,对应的组件就会显示


2 几个注意点

Vue-route核心知识整理,Vue,vue.js,javascript


3 路由的基本使用

【1】创建整个应用的路由器

Vue-route核心知识整理,Vue,vue.js,javascript


 【2】在main.js入口文件中引入

Vue-route核心知识整理,Vue,vue.js,javascript


【3】App组件

Vue-route核心知识整理,Vue,vue.js,javascript


4 嵌套 (多级) 路由

【1】router文件夹下的index.js文件中

Vue-route核心知识整理,Vue,vue.js,javascript


【2】Home组件中

Vue-route核心知识整理,Vue,vue.js,javascript


5 路由传参

5.1 query 方式传参

【1】先写个三级路由,让其跳转到Detail组件

Vue-route核心知识整理,Vue,vue.js,javascript


【2】利用 query 将Message组件中的数据传递给组件Detail中

在Message组件中:

5.1.1 跳转路由并携带query参数, to的字符串写法

对 to 进行数据绑定并使用模板字符串的写法

<template>
    <div>
        <ul>
            <li v-for="m in messageList" :key="m.id">
                <!-- 跳转路由并携带query参数, to的字符串写法 -->
                <router-link :to="`/home/message/detail?id=${m.id}&title=${m.title}`">{{m.title}}</router-link>
            </li>
        </ul>

        <!-- 展示内容 -->
        <router-view></router-view>
    </div>
</template>

<script>
    export default {
        name: 'Message',
        data() {
            return {
                messageList: [
                    {id:'001',title:'message001'},
                    {id:'002',title:'message002'},
                    {id:'003',title:'message003'}
                ]
            }
        },
    }
</script>

Detail组件中接收参数:

<template>
    <div>
        <h3>Detail</h3>
        <ul>
            <li>消息编号:{{ $route.query.id }}</li>
            <li>消息内容:{{$route.query.title}} </li>
        </ul>
    </div>

</template>

<script>
    export default {
        name: 'Detail',
    }
</script>

 

5.1.2 跳转路由并携带query参数, to的对象写法

Message组件中:

<template>
    <div>
        <ul>
            <li v-for="m in messageList" :key="m.id">
                <!-- 跳转路由并携带query参数, to的对象写法 -->
                <router-link :to="{
                    path:'/home/message/detail',
                    query:{
                        id:m.id,
                        title:m.title
                    }
                }">
                    {{m.title}}
                </router-link>

            </li>
        </ul>

        <!-- 展示内容 -->
        <router-view></router-view>
    </div>
</template>

<script>
    export default {
        name: 'Message',
        data() {
            return {
                messageList: [
                    {id:'001',title:'message001'},
                    {id:'002',title:'message002'},
                    {id:'003',title:'message003'}
                ]
            }
        },
    }
</script>

Detail组件中:

<template>
    <div>
        <h3>Detail</h3>
        <ul>
            <li>消息编号:{{ $route.query.id }}</li>
            <li>消息内容:{{$route.query.title}} </li>
        </ul>
    </div>

</template>

<script>
    export default {
        name: 'Detail',
    }
</script>

【总结】

Vue-route核心知识整理,Vue,vue.js,javascript


5.2 给路由命名

在上述使用query传参中,使用 to 的对象形式传参时,如果路径很长时,就很麻烦

Vue-route核心知识整理,Vue,vue.js,javascript


所有我们就可以给路由命名,通过name 指定要跳转的路径

Vue-route核心知识整理,Vue,vue.js,javascript


在Message中

Vue-route核心知识整理,Vue,vue.js,javascript


5.3 params方式传参

【1】配置路由,声明接收params参数

Vue-route核心知识整理,Vue,vue.js,javascript


 

【2】Message组件中传递参数

5.3.1 跳转路由并携带params参数, to的字符串写法

<template>
    <div>
        <ul>
            <li v-for="m in messageList" :key="m.id">
                <!-- 跳转路由并携带params参数, to的字符串写法 -->
                <router-link :to="`/home/message/detail/${m.id}/${m.title}`">{{m.title}}</router-link>
            </li>
        </ul>

        <!-- 展示内容 -->
        <router-view></router-view>
    </div>
</template>

<script>
    export default {
        name: 'Message',
        data() {
            return {
                messageList: [
                    {id:'001',title:'message001'},
                    {id:'002',title:'message002'},
                    {id:'003',title:'message003'}
                ]
            }
        },
    }
</script>

5.3.2 跳转路由并携带params参数, to的对象写法

使用对象形式传参时:指定跳转路径,必须使用name配置项, 不允许使用path配置项

<template>
    <div>
        <ul>
            <li v-for="m in messageList" :key="m.id">
                <!-- 跳转路由并携带params参数, to的对象写法 -->
                <router-link :to="{
                    name: 'xiangqing',  // 如果使用params传参这边必须使用name, 不允许使用path
                    params:{
                        id:m.id,
                        title:m.title
                    }
                }">
                    {{m.title}}
                </router-link>

            </li>
        </ul>

        <!-- 展示内容 -->
        <router-view></router-view>
    </div>
</template>

<script>
    export default {
        name: 'Message',
        data() {
            return {
                messageList: [
                    {id:'001',title:'message001'},
                    {id:'002',title:'message002'},
                    {id:'003',title:'message003'}
                ]
            }
        },
    }
</script>

【3】Detail组件接收参数

Vue-route核心知识整理,Vue,vue.js,javascript


5.4 props配置,实现传参

在router文件夹下的index.js文件中编写配置, 想传递参数给哪个组件,就给哪个组件加props配置

                   children: [ // 子路由的子路由(三级路由)
                        {
                            name: 'xiangqing',
                            path: 'detail',
                            component: Detail,

                           // props: ...
                        }
                    ] 

使用props配置传参时,就会将接收的参数以props形式传递给目标组件


5.4.1 props配置方式1

props的第一种写法,值为对象,该对象中的所有key、value都会以props形式传递给Detail组件

这种方式用的不多,因为只能传递固定值的参数 

Vue-route核心知识整理,Vue,vue.js,javascript

Detail组件中接收参数并使用

Vue-route核心知识整理,Vue,vue.js,javascript


 

5.4.2 props配置方式2

值为布尔值,若布尔值为真,就会把该路由组件收到的所有params参数,以props形式传递给Detail组件

缺点是只能传递params参数

Vue-route核心知识整理,Vue,vue.js,javascript

接收方式跟上面一样


 

5.4.3 props配置方式3

props的第三种写法,值为函数

推荐使用这种方式,因为query参数和params参数都可以传递

Vue-route核心知识整理,Vue,vue.js,javascript


 

6 路由的replace属性

Vue-route核心知识整理,Vue,vue.js,javascript

Vue-route核心知识整理,Vue,vue.js,javascript

这个过程就相当于压栈的过程,push方式是将点击的所有路径都一次地压入栈中,而replace方式是将当前地路径替换掉它之前地路径


7 路由的编程式导航

作用:不借助<router-link>实现路由跳转,让路由跳转更加灵活

【代码1】 

<template>
    <div>
        <ul>
            <li v-for="m in messageList" :key="m.id">
                <button @click="pushShow(m)">push查看</button>
                <button @click="replaceShow(m)">replace查看</button>

            </li>
        </ul>

        <!-- 展示内容 -->
        <router-view></router-view>
    </div>
</template>

<script>
    export default {
        name: 'Message',
        data() {
            return {
                messageList: [
                    {id:'001',title:'message001'},
                    {id:'002',title:'message002'},
                    {id:'003',title:'message003'}
                ]
            }
        },
        methods: {
            pushShow(m) {
                this.$router.push({
                    name: 'xiangqing',
                    params:{
                        id: m.id,
                        title: m.title
                    }
                })
            },
            replaceShow(m) {
                this.$router.replace({
                    name: 'xiangqing',
                    params:{
                        id: m.id,
                        title: m.title
                    }
                })
            }
            
        },
    }
</script>

<style>

</style>

 【代码2】

<template>
    <div class="col-xs-offset-2 col-xs-8">
        <div class="page-header">
            <h2>Vue Router Demo</h2>
            <button @click="back">后退</button>
            <button @click="forward">前进</button>
        </div>
    </div>
</template>

<script>
    export default {
        name: 'Banner',
        methods: {
            back() {
                // this.$router.back()
                // go传入的正数表示前进的步数,负数表示后退的步数
                this.$router.go(-1)
            },
            forward() {
                // this.$router.forward()
                this.$router.go(1)
            }
        },
    }
</script>

【总结】

Vue-route核心知识整理,Vue,vue.js,javascript


8 缓存路由组件

当一个组件中含有input表单时,如果用户在表单中输入了内容,这时又点击了另一个链接,此时当前的组件就会被销毁,在下一次访问该组件时,表单中的数据被清空了,如果用户输入了一些重要且长的信息,这用户体验是非常不好的。所以我们可以缓存路由组件解决这个问题

News组件 

Vue-route核心知识整理,Vue,vue.js,javascript 

Vue-route核心知识整理,Vue,vue.js,javascript


【总结】

Vue-route核心知识整理,Vue,vue.js,javascript


 

9 两个新的生命周期钩子

Vue-route核心知识整理,Vue,vue.js,javascript


10 全局路由守卫(前置和后置路由守卫)

在router文件夹下的index.js文件中

注意这边的meta配置项

Vue-route核心知识整理,Vue,vue.js,javascript


 

Vue-route核心知识整理,Vue,vue.js,javascript


11 独享路由守卫

只有前置,没有后置

Vue-route核心知识整理,Vue,vue.js,javascript


12 组件内守卫

Vue-route核心知识整理,Vue,vue.js,javascript


13 路由的两种工作模式

有hash和history两种工作模式,默认是hash模式

如何修改为history模式?

Vue-route核心知识整理,Vue,vue.js,javascript


Vue-route核心知识整理,Vue,vue.js,javascript文章来源地址https://www.toymoban.com/news/detail-831478.html

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

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

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

相关文章

  • vue代码安全,10项防范措施_vue中的安全(1),架构师花费近一年时间整理出来的网络安全核心知识

    vue代码安全,10项防范措施_vue中的安全(1),架构师花费近一年时间整理出来的网络安全核心知识

    避免在模板中直接渲染用户提供的 HTML 内容,以防止跨站脚本攻击(XSS)。使用v-html时要格外小心。 data() { return { escapedHtml: this.userInput.replace(//?script/g, ‘’), }; } 3,授权和访问控制 根据用户的角色和权限来控制对页面和功能的访问。可以使用路由守卫或自定义权限验证逻辑

    2024年04月26日
    浏览(8)
  • 持续不断更新中... 自己整理的一些前端知识点以及前端面试题,包括vue2,vue3,js,ts,css,微信小程序等

    答: 在普通的前端项目工程中,在script标签中增加setup即可使用api 使用setup()钩子函数 答: 不要在计算属性中进行异步请求或者更改DOM 不要直接修改computed的值 区别: 计算属性值基于其响应式依赖被缓存,意思就是只要他之前的依赖不发生变化,那么调用他只会返回之前缓

    2024年02月11日
    浏览(24)
  • Vue入门——核心知识点

    Vue入门——核心知识点

    Vue是一套用于 构建用户界面 的 渐进式 JS框架。 构建用户界面:就是将后端返回来的数据以不同的形式(例如:列表、按钮等)显示在界面上。 渐进式:就是可以按需加载各种库。简单的应用只需要一个核心库即可,复杂的应用可以按照需求引入各种Vue插件。 采用组件化模式

    2024年02月06日
    浏览(12)
  • 【DAY43-1】vue知识整理

    Vue 是一个流行的JavaScript框架,它具有简单易学、灵活高效的特点,在前端开发中受到广泛欢迎。Vue生态包括了众多的插件和工具,以下是几个常见的Vue生态: Vuex :Vuex是为Vue.js应用程序开发的状态管理模式。它可以帮助你管理应用程序的所有组件的状态,并使用一些规则来

    2023年04月22日
    浏览(9)
  • Vue.js的核心概念

    Vue.js 是一个流行的 JavaScript 框架,用于构建交互式的 web 界面。 它的核心概念包括: 1. 响应式系统 :Vue 使用响应式系统来确保 UI 与 underlying data 保持同步。当数据变化时,视图自动更新。 2. 组件系统 :Vue 应用由可复用的组件构成。每个组件都有自己的视图、业务逻辑和样

    2024年01月18日
    浏览(9)
  • 《Vue.js 设计与实现》—— 02 框架设计核心要素

    《Vue.js 设计与实现》—— 02 框架设计核心要素

    框架设计并非仅仅实现功能那么简单,里面有很多学问。例如: 框架应该给用户提供哪些构建产物?产物的模块格式如何? 当用户没有以预期的方式使用框架时,是否应该打印合适的警告信息从而提供更好的开发体验,让用户快速定位问题? 开发版本和生产版本的构建有何

    2024年02月03日
    浏览(15)
  • Vue.js核心概念简介:组件、数据绑定、指令和事件处理

    Vue.js核心概念简介:组件、数据绑定、指令和事件处理

    本文介绍了Vue.js的四个核心概念:组件、数据绑定、指令和事件处理。每个概念都通过一个简单的示例进行了详细的解释。通过学习这些概念,您将能够充分利用Vue.js的强大功能,构建高效、灵活的Web应用程序。 1 组件 组件是Vue.js的核心概念之一,它允许您将UI分解为相互作

    2024年02月04日
    浏览(13)
  • JavaScript 框架比较:Angular、React、Vue.js

    在 Web 开发领域,JavaScript 提供大量技术栈可供选择。其中最典型的三套组合,分别是 MERN、MEAN 和 MEVN。这些首字母相同的选项各自代表不同的技术加工具组合。为了在这些技术栈中做出明智选择,让我们先从核心组件聊起,再对各自前端框架(React、Angular 和 Vue)进行简化比

    2024年01月20日
    浏览(11)
  • 【js&vue】联合gtp仿写一个简单的vue框架,以此深度学习JavaScript

    【js&vue】联合gtp仿写一个简单的vue框架,以此深度学习JavaScript

    lifecycle.js 注解: this.$options.beforeMount.call(this);与 this.$options.beforeMount();有什么区别: call(this)  的作用是将当前对象( this )作为参数传递给  beforeMount  方法,使得在  beforeMount  方法内部可以通过  this  访问到当前对象的上下文 直接调用了  beforeMount  方法,没有指定上下

    2024年02月09日
    浏览(18)
  • vue diff算法与虚拟dom知识整理(4) h函数虚拟节点嵌套

    vue diff算法与虚拟dom知识整理(4) h函数虚拟节点嵌套

    那么 先补充上文有一个没强调的点 h函数 当你不需要属性时 其实是可以不传的 例如 我们打开案例 打开 src下的index.js 修改代码如下 声明标签为div 不需要任何标签属性 因此 我们就直接 告诉他div 然后后面一个参数直接跟里面的文本 程序也能识别 我们运行项目 可以看到 一切

    2024年02月02日
    浏览(30)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包