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),架构师花费近一年时间整理出来的网络安全核心知识

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    2024年01月20日
    浏览(43)
  • 【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日
    浏览(39)
  • vue diff算法与虚拟dom知识整理(4) h函数虚拟节点嵌套

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

    2024年02月02日
    浏览(39)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包