Vue学习笔记(七)路由

前端面试总结第二天 1:对于MVVM的理解? MVVM 是 Model-View-ViewModel 的缩写。 Model代表数据模型,也可以在Model中定义数据修改和操作的业务逻辑。 View 代表UI 组件,它负责将数据模型转化成UI 展现出来。 ViewModel 监听模型数据的改变和控制视图行为、处理用户交互,简单理解就是一个同步View 和 Model的对象,连接Model和View。 在MVVM架构下,... 阅读详情

对于大多数单页面应用,都推荐使用官方支持的 vue-router 库。下面的代码默认导入了vue-router 库

路由的基本使用


在Vue中,使用new VueRouter来创建一个路由,在Vue实例中将该路由放入Vue实例中的myRouter,即在某个实例上创建了一个路由。

let login = {
    template: '<h1>this is login</h1>'
}


let myRouter = new VueRouter({
    routes: [{
        path: '/login',
        component: login
    }]
})

let vm = new Vue({
    el: '#app',
    data: {},
    methods: {},
    router: myRouter
})

在该实例所对应的html元素中,使用<router-view></router-view>可以用来显示路由对应的模板,根据上面的代码,当hash为/login时就会显示login模板中的内容,html代码如下

<div id="app">
    <router-view></router-view>
</div>

渲染后为

<div id="app"> 
    <h1>this is login</h1>
</div>

路由的切换


路由可以通过router-link标签的to属性来切换,to属性的值为要切换到的hash。

<div id="app">
    <router-link to="/login">login</router-link>
    <router-link to="/register">register</router-link>
    <router-view></router-view>
</div>


<script>
    let login = {
        template: '<h1>this is login</h1>'
    }

    let register = {
        template: '<h1>this is register</h1>'
    }


    let myRouter = new VueRouter({
        routes: [{
            path: '/login',
            component: login
        }, {
            path: '/register',
            component: register
        }]
    })

    let vm = new Vue({
        el: '#app',
        data: {},
        methods: {},
        router: myRouter
    })
</script>

页面渲染为下

<div id="app">
    <a href="#/login" class="">login</a> 
    <a href="#/register" class="">register</a> 
    <!---->
</div>

当点击login时就会显示hash为/login路由的模板,而点击register时就会显示hash为/register路由的模板。点击后为下

// 点击login
<div id="app">
    <a href="#/login" class="router-link-exact-active router-link-active">login</a> 
    <a href="#/register" class="">register</a> 
    <h1>this is login</h1>
</div>


// 点击register
<div id="app">
    <a href="#/login" class="">login</a> 
    <a href="#/register" class="router-link-exact-active router-link-active">register</a>     
    <h1>this is register</h1>
</div>

切换的标签设置

可以注意到,当渲染到页面的时候,router-link标签变成了a标签,这是默认下的渲染方式,我们也可以通过其tag属性手动设置渲染后的标签,tag属性的值为渲染后的标签

<div id="app">
    <router-link to="/login" tag="span">login</router-link>
    <router-link to="/register" tag="p">register</router-link>
    <router-view></router-view>
</div>

渲染后为

<div id="app">
    <span class="">login</span> 
    <p class="">register</p> 
    <!---->
</div>

可以看到两个标签不再是a标签了,而是手动设置的span标签和p标签。

切换的高亮

可以注意到,在点击router-link改变路由时,被点击的元素的class发生了改变,多了router-link-exact-active和router-link-active两个class类选择器,我们可以通过这两个选择器来设置切换时的元素的高亮

<style>
    .router-link-active {
        color: red;
    }
</style>

通过这样设置,在切换路由时,当前路由对应的router-link标签就会多了个color:red的样式。

这个路由高亮的类选择器名比较长,我们通过在路由构建时多添加一个linkActiveClass属性可以自定义一个类选择器名来使用,linkActiveClass属性的值即为高亮时的类选择器样式名。

let myRouter = new VueRouter({
    routes: [{
        path: '/login',
        component: login
    }, {
        path: '/register',
        component: register
    }],
    linkActiveClass: "myActive"
})

这样设置后,高亮的类选择器名就变成了myActive。

路由的重定向

有时候我们希望在一打开页面时就跳转到另一个hash的页面,可以使用路由的重定向。在构建路由时,在routes属性中通过设置一个path为'/'的对象,给其设置redirect属性,值就为重定向所到的hash。

let myRouter = new VueRouter({
    routes: [{
        path: '/',
        redirect: '/login'
    }, {
        path: '/login',
        component: login
    }, {
        path: '/register',
        component: register
    }],
    linkActiveClass: "myActive" 
})

这里一打开页面就会先跳转到hash为'/login'的页面。

路由的参数


路由传递参数有两种方式

通过query方式传递

通过query方式传递只要在router-link标签的to属性的值后面加上?键值=键名即可。在调用时通过$route.query.键名来调用。

<div id="app">
    <router-link to="/login?id=10" tag="span">login</router-link>
    <router-link to="/register?id=20" tag="p">register</router-link>
    <router-view></router-view>
</div>


<script>
    let login = {
        template: '<h1>this is login----{{$route.query.id}}</h1>',
        created() {
            console.log(this.$route)  //  在这里可以打印出$route对象来查看里面的内容
        }
    }

    let register = {
        template: '<h1>this is register----{{$route.query.id}}</h1>'
    }


    let myRouter = new VueRouter({
        routes: [{
            path: '/',
            redirect: '/login'
        }, {
            path: '/login',
            component: login
        }, {
            path: '/register',
            component: register
        }],
        linkActiveClass: "myActive"
    })

    let vm = new Vue({
        el: '#app',
        data: {},
        methods: {},
        router: myRouter
    })
</script>

通过params方式传递

与使用query方式传递不同,使用params传递时,要在构建路由实例的时候设置传递的键名,在router-link中设置传递的键值。在调用时是通过$route.params.键名来调用的。

<div id="app">
    <!-- 在hash后加/后跟键值 -->
    <router-link to="/login/10" tag="span">login</router-link>
    <router-link to="/register/20" tag="p">register</router-link>
    <router-view></router-view>
</div>


<script>
    let login = {
        template: '<h1>this is login----{{$route.params.id}}</h1>',
        created() {
            console.log(this.$route)
        }
    }

    let register = {
        template: '<h1>this is register----{{$route.params.id}}</h1>'
    }


    let myRouter = new VueRouter({
        routes: [{
            path: '/',
            redirect: '/login'
        }, {
            path: '/login/:id', //  设置键名
            component: login
        }, {
            path: '/register/:id',
            component: register
        }],
        linkActiveClass: "myActive"
    })

    let vm = new Vue({
        el: '#app',
        data: {},
        methods: {},
        router: myRouter
    })
</script>

params传递的参数是从path属性中解析出来的,这与query方式传递不同,使用query方式传递时path中并不会出现参数。可以在打印出来的$route中查看属性。

命名路由的使用


除了上面的使用方法,也可以通过名称来标识一个路由以达到方便的效果,使用命名路由也可以简单地传递参数。

<div id="app">
    <!-- 注意这里的to使用了v-bind绑定了 -->
    <router-link :to="{name:'login',params:{id:10}}">login</router-link>
    <router-link :to="{name:'register',params:{id:20}}">register</router-link>
    <router-view></router-view>
</div>


<script>
    let login = {
        template: '<h1>this is login----{{$route.params.id}}</h1>',
        created() {
            console.log(this.$route)
        }
    }

    let register = {
        template: '<h1>this is register----{{$route.params.id}}</h1>'
    }


    let myRouter = new VueRouter({
        routes: [{
            path: '/',
            redirect: '/login'
        }, {
            path: '/login/:id',
            name: 'login', // 设置路由名称
            component: login
        }, {
            path: '/register/:id',
            name: 'register',
            component: register
        }],
        linkActiveClass: "myActive"
    })

    let vm = new Vue({
        el: '#app',
        data: {},
        methods: {},
        router: myRouter
    })
</script>

路由的嵌套


实际生活中的应用界面,通常由多层嵌套的组件组合而成。同样地,URL 中各段动态路径也按某种结构对应嵌套的各层组件。要让router-view中嵌套其他的router-view,需要在VueRouter实例中设置children参数。

<div id="app">
    <router-link to="/access">access</router-link>
    <router-view></router-view>
</div>

<template id="temp">
    <div>
        <router-link to="/access/login">登录</router-link>
        <router-link to="/access/register">注册</router-link>
        <router-view></router-view>
    </div>
</template>

<script>
    let login = {
        template: "<h1>登录</h1>"
    }

    let register = {
        template: "<h1>注册</h1>"
    }

    let access = {
        template: "#temp"
    }

    let myRoute = new VueRouter({
        routes: [{
            path: '/access',
            component: access,
            children: [{ // 设置被嵌套的路由
                path: 'login',
                // 前面不要加/  加/表示从根目录开始匹配,加了的话就会变成/login  不加就是/access/login
                component: login
            }, {
                path: 'register',
                component: register
            }]
        }]
    })

    let vm = new Vue({
        el: "#app",
        router: myRoute
    })
</script>

路由命名视图


如果要在同一个路由下展示多个视图,而不是嵌套展示,可以使用路由的命名视图来实现。在上面代码中,每个path都对应一个component,而如果我们要使用路由的命名视图,我们要用到的是components来传入一个对象,对象中有多个模板,键名为router-view的name属性对应的值,而键值为对应的模板。

<div id="app">
    <router-view name="header"></router-view>
    <router-view name="left"></router-view>
    <router-view name="main"></router-view>
</div>


<script>
    let headerTemp = {
        template: "<h1>this is header</h1>"
    }

    let leftTemp = {
        template: "<h1>this is left</h1>"
    }

    let mainTemp = {
        template: "<h1>this is main</h1>"
    }

    let myRouter = new VueRouter({
        routes: [{
            path: '/',
            components: {
                header: headerTemp,
                left: leftTemp,
                main: mainTemp
            }
        }]
    })

    let vm = new Vue({
        el: "#app",
        router: myRouter
    })
</script>

使用watch监听路由的改变


路由地址的改变可以通过watch来监听,watch的具体用法可见Vue学习笔记(六)计算属性和监听属性

<div id="app">
    <router-link to="/login" tag="span">登录</router-link>
    <router-link to="/register">注册</router-link>

    <router-view></router-view>

</div>
<script>
    let login = {
        template: '<h1>登录组件</h1>'
    }

    let register = {
        template: '<h1>注册组件</h1>'
    }

    let myRouter = new VueRouter({
        routes: [{
            path: '/',
            redirect: '/login' // 默认跳转到/login
        }, {
            path: '/login',
            component: login
        }, {
            path: '/register',
            component: register
        }],
        linkActiveClass: "myActive" // 高亮属性,默认为router-link-active
    })

    let vm = new Vue({
        el: '#app',
        data: {},
        methods: {},
        router: myRouter,
        watch: {
            '$route.path': function(newVal, oldVal) {
                console.log(`the old is ${oldVal}  this new is ${newVal}`)
            }
        }
    })
</script>

 

【零基础入门VUE】VueJS - 概述 不会对 DOM 进行更改,而是创建 DOM 的副本,该副本以 JavaScript 数据结构的形式存在。最终的更改会更新到真实的 DOM,用户将看到它的变化。随后,对两个 JavaScript 对象进行比较,并在真实 DOM 中更新最终的更改。Ember 添加了 glimmer 渲染引擎,旨在提高重新渲染性能,这与使用虚拟 DOM 的 VueJS 和 React 是类似的概念。随着时间的推移,淘汰赛的发展速度已经放缓。VueJS 继承了 Angular 和 React 的优点,并构建了一个强大的库。 阅读详情

相关推荐

vuejs切换导航条高亮路由高亮做法

我的GitHub前端经验总结,喜欢的话请点star✨✨Thanks.:https://github.com/liangfengbo/frontend-develop vuejs导航条高亮我的做法: 用一个数组存导航条,用v-for循环它,这样可以减少代码,二可以使用它的下标来判断高亮,三还可以获取后端的导航信息来遍历 重点是在:routerLink(index, path)函数,传入当前点击...

Github.com/liangfengbo 1万+

VUE+elementUI递归实现动态路由多级菜单

五封面

New924的博客 1510

阻抗匹配与史密斯(Smith)圆图

在找到点B和B'后,我们就能够测量A'到B和B'到D的弧长,前者就是C的归一化电纳值,后者为L的归一化电抗值。当然,表面上看新的点好像是一个不同的阻抗,实际上Z和1/Y表示的是同一个元件(这个新值在圆图上呈现为一个不同的点,而且反射系数也不相同,依次类推)。出现这种情况的原因是我们的图形本身是一个阻抗图,而新的点代表的是一个导纳。这个方程是在复平面(Γr, Γi)上、圆的参数方程(x - a)² + (y - b)² = R²,它以[r/(r + 1), 0]为圆心,半径为1/(1 + r)。

qq_55759599的博客 3963

created()和mounted()的区别及其用法

需要注意的是,created()和mounted()只有在Vue实例被成功创建和挂载后才会执行,如果中间发生了错误或中止,那么这两个函数也不会执行。在使用这两个函数时,要避免过多的依赖全局状态或其他模块,以保证逻辑的灵活性和可重用性。

qq_52675745的博客 3544

如何用Python+Librosa实现轴承异响检测?5步搞定工业设备故障预警

本文详细介绍了如何利用Python和Librosa库,通过5个步骤构建工业轴承异响检测与故障预警系统。从音频采集、预处理、频谱特征提取,到构建机器学习模型并进行实时监测,提供了完整的代码级解决方案。该方法能有效识别轴承早期故障特征,实现低成本、高效的设备预测性维护。

rnn9storyteller的博客 634

5分钟搞定!用ZLMediaKit搭建GB28181视频监控系统(含避坑指南)

本文提供了一份基于ZLMediaKit搭建GB28181视频监控系统的实战指南。文章详细介绍了从环境准备、核心组件(ZLMediaKit与SIP服务器)部署、摄像头配置到内外网穿透的完整流程,并重点分享了设备ID配置、防火墙设置等关键避坑经验,帮助开发者快速构建稳定可控的监控平台。

apple5的专栏 1088

Vue---created()使用的注意事项--执行顺序

vue框架中通常在created钩子函数里执行访问数据库的方法,然后返回数据给前端,前端data中定义全局变量接收数据。例如:当需要将数据库数据显示到页面时,就可以将获取表数据的方法在created()进行调用,在页面渲染之前就将数据获取。并不是按照顺序执行,如果将多个这种类型的方法放入created()中会造成数据获取失败。将上面调用一个数据库的方法之间有数据联系的放在一个方法中。如下这种形式,下面4种方法都要调用同一数据库。对于要调用数据库的多个方法。对于普通的方法调用,

weixin_56851586的博客 5790

学Simulink--基于风力发电系统的场景实例:海上风电场在复杂海况下的动态响应仿真

本实例将创建一个针对海上风电场在复杂海况下的动态响应模型。该模型不仅考虑了不同风速条件的影响,还引入了波浪和水流对风机塔架及基础结构的影响。通过仿真验证系统的有效性,并探索最佳控制参数设置以提高整体性能和稳定性。本教程展示了如何在Simulink中实现一个海上风电场在复杂海况下的动态响应仿真模型,并分析其性能。通过这种方式,我们不仅可以验证所提出的技术手段在提高海上风电场稳定性和效率方面的有效性,还能进一步探索优化参数以适应特定的应用场景。

xiaoheshang_123的博客 168

2021-10-12

记录常犯的错误 1、created(){}函数,错写成create,控制台不报错,但无打印

danniyedan的博客 178

ubuntu22.04下对使用linuxdeployqt发布的qt程序进行deb打包操作

【代码】ubuntu22.04下对使用linuxdeployqt发布的qt程序进行deb打包操作。

十三阿哥的博客 1404

华为OD机考双机位C卷 - 朋友圈个数(Java & Python& JS & C/C++ & GO )

华为OD机考双机位C卷 - 朋友圈个数(OD上机考试双机位C卷)。提供Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。

算法大师! 695

学习笔记Vue(十 七)—— 路由

首先添加路由:vue add router 添加完成之后,vue的默认界面上面多了一条导航: 这就是vue默认帮你生成的导航。 可以看到项目的src文件夹下多了一个router.js文件,和一个views的文件夹。 可以看到views里默认有两个自动生成的文件,Home.vue 和About.vue ,对应页面上显示的两个导航,所以这个views里放的就是路由的组件。 再看router.js的...

qq_38932377的博客 261

AI漫剧全套万能提示词合集

今天给大家整理一套已经跑通爆款漫剧的万能提示词库!覆盖:豆包剧本人设词 + 分镜生成词 + 即梦绘图词 + 动态优化词 + 防翻车固定词直接复制粘贴,新手也能做出稳定、高清、统一、有质感的AI漫剧!你是资深短视频漫剧编剧,擅长制作60秒竖屏爆款AI漫剧,请为我创作一集完整漫剧内容。要求:开头3秒高能抓眼,中段有冲突转折,结尾留强悬念钩子,节奏紧凑、适合短视频流量。首先生成固定统一人物人设:包含脸型、五官、发色、发型、穿搭、身材、气质、画风、光影细节,要求足够精细,保证全程角色不变脸。

欢迎来到鸾姝淡月博客,专为程序员和编程爱好者打造的技术博客。我们分享编程语言趋势、开发工具、编程哲学、职业发展等,助你掌握新技术,优化技能,激发编程热情。 1969

vue学习笔记(七)---- vue中的路由

一、什么是路由 对于普通的网站来说,所有的超链接都是URL地址,所有的URL地址都对应服务器上对应的资源 对应单页面的应用程序来说,主要通过URL中的hash(#号)来实现不同页面之间的切换,同时,hash有一个特点:HTTP请求中不会包含hash相关的内容,所以,单页面的应用程序的页面跳转主要用hash来处理 在单页面应用程序中,这种通过hash改变来切换页面的方式,称作前端路由(区别于后端路由); 二、vue-router的安装 官方文档:https://router.vuejs.org/zh/ 安

保持清醒 312

【ARM Trace32(劳特巴赫) 使用介绍 10 -- Trace32 scan dump 详细介绍】

将图 1-2 中扫描单元按照扫描移位模式连接起来,就构成了扫描测试中的基本结构,这里介绍下全扫描。全扫描就是多个扫描单元相连接,上一单元的扫描输出,连接到目前单元的扫描输入,目前单元的扫描输出连接到下一单元的扫描输入,以此类推,构成一条移位寄存器链,如图1-3 所示:图 1-3 全扫描这样的扫描结构,可通过一个串行输入端,将期望的数据存入移位寄存器链并观察运行结果。

CodingCos的博客 2034

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

VueJS 官方路由之 Vue Router

Vue Router 是 VueJS 官方提供的路由插件,使用该插件你将能更加便利的管理 VueJS 创建的单页面应用程序(Single Page Web Application,SPA)中的组件间的动态切换。你可以使用 a 元素代替 router-link 元素,但并不推荐这么做。使用 router-link 而不是 a 元素可以使你获得来自 vue-router 的更多帮助。

两个月亮 1600

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

VueJS 之路由

在 VueJS 中,路由可以理解为 Hash 地址 与 组件 的映射关系。由于 VueJS 构建的是单页面应用程序,在构造具有如下效果的页面时,无法直接切换页面(因为仅有一个页面),但可以通过切换组件来达到相同的效果。路由在 VueJS 及 Web 后端中的概念稍有不同,但都表示某两者之间的映射关系。锚点是网页制作中超级链接的一种,是一种能够定位当前页面的元素的超级链接。

两个月亮 1022

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

【vuejs】vue-router 之 addRoute 动态路由的应用总结

Vue Router 是 Vue.js 官方的路由管理器,用于构建单页面应用。它与 Vue.js 深度集成,让开发者能够轻松地构建具有复杂用户界面的单页面应用。Vue Router 允许你定义不同的路由,并通过 组件在应用中显示匹配的组件。Vue Router 的核心特性包括:Vue Router 的安装和基本使用步骤如下:对于 Vue 2,推荐使用 Vue Router 3.x 版本。可以通过 npm 或 yarn 进行安装: 1.2 项目中引入 Vue Router 在项目的入口文件(如 main.j

工作的日常记录和平凡的生活分享 8353

vuejs中路由的嵌套

虽互不曾谋面,但希望能和您成为笔尖下的朋友以读书,技术,生活为主,偶尔撒点鸡汤不作,不敷衍,意在真诚吐露,用心分享点击左上方,可关注本刊标星公众号(ID:itclanCoder)如果不知道如何操作点击这里,标星不迷路前言在做Vue的项目当中,路由的嵌套是一个非常常见的操作,在我们网页界面当中的一些切换,跳转,或多或少都会用到只要参与开发一些后台管理系统,那必然会用到嵌套路...

itclanCoder 674

Vue(七):路由

一、前端路由的概念及原理 1.1 什么是路由 路由(router)就是对应关系 1.2 SPA与前端路由 SPA:单页面应用程序 前端路由:Hash地址与组件之间的对应关系 URL中#后面的都叫Hash地址,location.hash即可获取 1.3 前端路由的工作方式 (1)用户点击了页面上的路由链接 (2)导致了地址栏中的Hash值发生了变化 (3)前端路由监听到了Hash地址的变化 (4)前端把当前Hash值对应的组件渲染到浏览器中 二、vue-route.

baiduwenku112的博客 4084

Vuejs路由

vue-router是Vue.js官方的路由插件,它和vue.js是深度集成的,适合用于构建单页面应用。

qq_39465114的博客 1222

vuejs 配置路由

vuejs 路由加载 1, 安装    npm install --save vue-router 2, 引用    import VueRouter from 'vue-router' 3, 配置路由文件    var router = new VueRouter({    routes:[     {       path:"/hello",       component:HelloW...

qq_25635139的博客 2311

Vue学习笔记之路由

开发项目涉及多个页面多个组件,故必定涉及到路由,记录了相关的知识点:路由实现、懒加载、路由模式、全局变量、嵌套路由、重定向、别名以及导航守卫

bfbshs_ddd的博客 1464

探索Vue.js的无限可能 —— vuejs-challenges

挑战自我,共同成长,Vue.js挑战等你来战!

2401_83063795的博客 2897

【Vue】Vue的路由

一、Vue的路由 1.路由 2.前端路由 3.VueRouter路由 4.VueRouter的组成 5.VueRouter常用的函数 二、VueRouter的使用 1、安装vue-router 2、创建路由文件 3、声明路由请求接口 4、声明路由出口 三、动态路由 1.动态路由的路径格式 2.在URL中带查询参数 3.通配符匹配 四、嵌套路由 五、命名路由 六、命名视图 1.给路由视图添加name属性 2.在路由表中,指定components属性的值 七、导航守卫 1.路由导航的方式 2.导航守卫

早睡早起长头发的博客 8004

Vue----路由器

一、路由器机制 在VueJS中的路由,可以通过Vue-Router来处理 - https://router.vuejs.org/ - vue-router是Vue.js官方的路由插件,它和vue.js是深度集成的,适合用于构建单页面应用。 - vue的单页面应用是基于路由和组件的,路由用于设定访问路径,并将路径和组件映射起来。传统的页面应用,是用一-些超链接来实现页面切换和跳转的。在vue-router单页面应用中, 则是路径之间的切换,也就是组件的切换。 二、路由器实现的基

程序研博客 3009
上一篇: Vue学习笔记(六)计算属性和监听属性
下一篇: LeetCode 60.第k个排列 Java实现
前端小黑
博客等级 码龄9年 148粉丝 222原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值