版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第5章路由《Vue.js前端开发实战(第2版)》学习目标/Target
了解什么是路由,能够说出前后端路由的基本工作原理掌握VueRouter的安装,能够独立安装VueRouter掌握VueRouter的基本使用方法,能够在项目中配置VueRouter
掌握路由重定向的使用方法,能够解释路由重定向的实现
掌握嵌套路由的使用方法,能够实现路由的嵌套学习目标/Target
掌握动态路由的使用方法,能够实现动态路由的匹配掌握命名路由的使用方法,能够解释命名路由的实现掌握编程式导航的使用方法,能够灵活应用编程式导航
掌握导航守卫的使用方法,能够实现路由访问权限的控制章节概述/Summary在前面学过的单页Web应用中,一个网站只有一个HTML页面,所有组件的展示与切换都在这一个HTML页面中完成。虽然利用动态组件可以实现组件切换,但是当用户刷新网页或者通过URL地址重新访问网页时,组件的切换状态无法保留。为了解决这个问题,可以用路由实现组件切换。本章将从路由的概念与原理出发,详细讲解Vue中路由的使用方法。目录/Contents5.15.25.3初识路由初识VueRouter路由重定向5.4嵌套路由5.5动态路由目录/Contents5.65.75.8命名路由编程式导航导航守卫5.9阶段案例——后台管理系统初识路由5.1
先定一个小目标!了解什么是路由,能够说出前后端路由的基本工作原理5.1初识路由什么是路由?5.1初识路由提到路由(Route),一般我们会联想到网络中常见的路由器(Router),那么路由和路由器之间有什么关联呢?路由是指路由器从一个接口接收到数据,根据数据的目的地址将数据定向传送到另一个接口的行为和动作;而路由器是执行行为和动作的硬件设备,主要用于连接网络,实现不同网络之间的通信和数据传递。5.1初识路由后端路由后端路由的整个过程发生在服务器端,开发者需要在服务器端程序中建立一套后端路由规则。当服务器接收到请求后,会通过路由寻找当前请求的URL地址对应的处理程序。前端路由前端路由的整个过程发生在浏览器端,其特点是当URL地址改变时不需要向服务器发起一个加载新页面的请求,而是在维持当前页面的情况下切换页面中显示的内容。根据技术的不同,Web开发中的路由分为后端路由和前端路由。
5.1初识路由后端路由规则和处理程序都是开发人员事先编写的代码。当服务器接收到浏览器的请求后,会通过app.get()方法根据URL地址中的路径寻找对应的处理程序。下面以Node.js环境中的Express框架中的路由为例,演示后端路由的工作原理如下图所示。1.后端路由5.1初识路由下面以Vue中的路由为例,演示前端路由的工作原理。Vue中的路由有Hash模式和HTML5模式,具体介绍如下。①Hash模式Hash模式的前端路由通过URL中从“#”开始的部分实现不同组件之间的切换,“#”表示Hash符,“#”后面的值称为Hash值,该值将用于进行路由匹配。Hash模式前端路由的工作原理如下图所示。2.前端路由5.1初识路由②HTML5模式HTML5模式的URL地址与后端路由的URL地址的风格一致,可以通过URL地址中的路径进行路由匹配。HTML5模式前端路由的工作原理如下图所示。5.1初识路由初识VueRouter5.2
先定一个小目标!掌握VueRouter的安装,能够独立安装VueRouter5.2.1VueRouter的安装5.2.1VueRouter的安装VueRouter有多个版本,那么Vue3适用于VueRouter哪个版本?5.2.1VueRouter的安装VueRouter有多个版本,其中,VueRouter4适用于Vue3,而VueRouter3适用于Vue2。由于本书重点讲解Vue3,所以接下来将基于VueRouter4进行讲解。5.2.1VueRouter的安装步骤1在Vue3项目中演示VueRouter的安装在D:\vue\chapter05目录下创建一个新的Vue3项目。yarncreatevitemy-router--templatevuecdmy-routeryarn项目名称步骤3步骤25.2.1VueRouter的安装在my-router目录中,通过yarn安装VueRouter。yarnaddvue-router@4--save@4表示安装vue-router的版本号为4,即VueRouter4在Vue3项目中演示VueRouter的安装项目运行时依赖步骤1步骤3步骤25.2.1VueRouter的安装安装完成后,打开package.json文件,查看VueRouter的版本号。"dependencies":{"vue":"^3.2.45","vue-router":"4"},在Vue3项目中演示VueRouter的安装步骤1步骤3步骤2
先定一个小目标!掌握VueRouter的基本使用方法,能够在项目中配置VueRouter5.2.2VueRouter的基本使用5.2.2VueRouter的基本使用路由的基本使用步骤分为以下4步。定义路由组件创建路由模块导入并挂载路由模块134定义路由链接和路由视图25.2.2VueRouter的基本使用<!--Home.vue文件--><template><divclass="home-container"><h3>Home组件</h3></div></template><stylescoped>.home-container{min-height:150px;background-color:#f2f2f2;padding:15px;}</style>1.定义路由组件在src\components目录下创建Home.vue文件和About.vue文件。<!--About.vue文件--><template>
<divclass="about-container">
<h3>About组件</h3>
</div></template><stylescoped>.about-container{min-height:150px;background-color:#f2f2f2;padding:15px;}</style>5.2.2VueRouter的基本使用2.定义路由链接和路由视图使用<router-view>标签定义路由视图,该标签会被渲染成当前路由对应的组件。通过<router-link>标签定义路由链接方便在不同组件之间切换。<template><divclass="app-container"><h1>App根组件</h1><router-linkto="/home">首页</router-link><router-linkto="/about">关于</router-link><hr><router-view></router-view></div></template>5.2.2VueRouter的基本使用>>接上页代码<stylescoped>.app-container{text-align:center;font-size:16px;}.app-containera{padding:10px;color:#000;}.app-containera.router-link-active{color:#fff;background-color:#000;}</style>5.2.2VueRouter的基本使用3.创建路由模块①在src目录下创建router.js文件作为路由模块,并在该文件中导入路由相关函数。import{createRouter,createWebHashHistory}from'vue-router'②在router.js文件中导入需要被路由控制的Home组件和About组件。importHomefrom'./components/Home.vue'importAboutfrom'./components/About.vue'5.2.2VueRouter的基本使用③在router.js文件中创建路由实例对象。constrouter=createRouter({history:createWebHashHistory(),routes:[{path:'/home',component:Home},{path:'/about',component:About},]})④在router.js文件中导出路由实例对象。exportdefaultrouter注意:步骤②和③的组件加载方式是一次加载所有组件,除了这种方式外,还可以通过懒加载的方式动态加载组件。(下一页会讲到)5.2.2VueRouter的基本使用下面讲解如何通过懒加载的方式动态加载组件。删除第②步的代码。将第③步的代码修改为如下代码。constrouter=createRouter({history:createWebHashHistory(),routes:[{path:'/home',component:()=>import('./components/Home.vue')},{path:'/about',component:()=>import('./components/About.vue')},]})5.2.2VueRouter的基本使用4.导入并挂载路由模块在src\main.js文件中导入并挂载路由模块。import{createApp}from'vue'import'./style.css'importAppfrom'./App.vue'importrouterfrom'./router.js' //导入路由模块constapp=createApp(App)app.use(router) //挂载路由模块app.mount('#app')5.2.2VueRouter的基本使用执行yarndev命令启动服务。服务启动成功后,在浏览器中访问:5173/,使用路由后的初始页面效果、单击“首页”路由链接后的Home组件的效果、单击“关于”路由链接后的About组件的效果如下图所示。使用路由后的初始页面效果Home组件的效果About组件的效果5.2.2VueRouter的基本使用多学一招:更改路由链接激活项的类名在默认情况下,路由链接激活项的类名为router-link-active。如果需要更改类名,可以在创建路由实例对象时通过linkActiveClass属性设置一个类名。constrouter=createRouter({linkActiveClass:'router-active',
……})路由重定向5.3
先定一个小目标!掌握路由重定向的使用方法,能够解释路由重定向的实现5.3路由重定向什么是路由重定向?5.3路由重定向在开发过程中,可能希望当用户访问不同的路径时,页面中显示同一个组件,这时就需要用到路由重定向。路由重定向可以使用户在访问一个URL地址时,强制跳转到另一个URL地址,从而展示特定的组件。通过路由匹配规则中的redirect属性可以指定一个新的路由地址,从而实现路由重定向。5.3路由重定向下面演示路由重定向的使用方法。修改src\router.js文件,实现当用户访问“/”路径时,将路由重定向到“/home”路径。constrouter=createRouter({
history:createWebHashHistory(),
routes:[
{path:'/',redirect:'/home'},
{path:'/home',component:import('./components/Home.vue')},
{path:'/about',component:import('./components/About.vue')}
]})5.3路由重定向嵌套路由5.4
先定一个小目标!掌握嵌套路由的使用方法,能够实现路由的嵌套5.4嵌套路由什么是嵌套路由?5.4嵌套路由嵌套路由是指通过路由实现组件的嵌套展示,它主要由页面结构决定。实际项目中的应用界面通常由多层嵌套的组件组合而成,为了使多层嵌套的组件能够通过路由访问,路由也需要具有嵌套关系,也就是在路由里面嵌套它的子路由。5.4嵌套路由下面演示嵌套路由的简单配置。在src\router.js文件的路由匹配规则中通过children属性定义子路由匹配规则。routes:[{path:'父路由路径',component:父组件,children:[{path:'子路由路径1',component:子组件1},{path:'子路由路径2',component:子组件2}]}]5.4嵌套路由在组件中定义子路由链接的语法格式如下。<router-linkto="/父路由路径/子路由路径"></router-link>当使用children属性定义子路由匹配规则时,子路由的path属性前不要带“/”,否则会永远以根路径开始请求。注意5.4嵌套路由步骤1在src\components目录下创建pages目录,用于存放子路由组件。步骤3步骤4步骤2步骤5演示嵌套路由的实现5.4嵌套路由创建src\components\pages\Tab1.vue文件。演示嵌套路由的实现<template><div>Tab1组件</div></template><stylescoped>div{text-align:left;background-color:#9dc4e5;}</style>步骤3步骤4步骤5步骤1步骤25.4嵌套路由演示嵌套路由的实现创建src\components\pages\Tab2.vue文件。<template><div>Tab2组件</div></template><stylescoped>div{text-align:left;background-color:#ffba00;}</style>步骤3步骤4步骤5步骤1步骤25.4嵌套路由演示嵌套路由的实现在component\About.vue文件中添加子路由链接和子路由视图。<template><divclass="about-container"><h3>About组件</h3><router-linkto="/about/tab1">tab1</router-link><router-linkto="/about/tab2">tab2</router-link><hr><router-view></router-view></div></template><stylescoped>.about-container{步骤3步骤4步骤5步骤1步骤25.4嵌套路由演示嵌套路由的实现>>接上页代码min-height:150px;background-color:#f2f2f2;padding:15px;}.about-containera{padding:10px;border:1pxsolid#ccc;border-radius:5px;padding:5px10px;color:#000;margin:05px;}步骤3步骤4步骤5步骤1步骤25.4嵌套路由演示嵌套路由的实现>>接上页代码.about-containera.router-link-active{color:#000;background-color:#deebf6;}</style>步骤3步骤4步骤5步骤1步骤25.4嵌套路由演示嵌套路由的实现修改src\router.js文件,在routes中导入Tab1组件和Tab2组件,并使用children属性定义子路由匹配规则。routes:[{path:'/',redirect:'/about'},{path:'/home',component:()=>import('./components/Home.vue')},{path:'/about',component:()=>import('./components/About.vue'),children:[{path:'tab1',component:()=>import('./components/pages/Tab1.vue')},{path:'tab2',component:()=>import('./components/pages/Tab2.vue')}]}]步骤3步骤4步骤5步骤1步骤25.4嵌套路由在浏览器中访问:5173/。页面打开后,会自动重定向到About组件的路由,页面显示About组件;单击“tab1”链接,页面显示About组件中的Tab1组件;单击“tab2”链接,页面显示About组件中的Tab2组件,如下图所示。About组件About组件中的Tab1组件About组件中的Tab2组件5.4嵌套路由动态路由5.5
先定一个小目标!了解什么是动态路由,能够说出动态路径参数的定义方式5.5.1动态路由概述什么是动态路由?5.5.1动态路由概述动态路由是一种路径不固定的路由,路径中可变的部分被称为动态路径参数(DynamicSegment),使用动态路径参数可以提高路由规则的可复用性。在VueRouter的路由路径中,使用“:参数名”的方式可以在路径中定义动态路径参数。5.5.1动态路由概述5.5.1动态路由概述下面通过代码演示如何定义一个动态路由。{path:'/sub/:id',component:组件},动态路径参数id为参数名不同动态路径参数的动态路由在进行切换时,由于它们都是指向同一组件,所以Vue不会销毁再重新创建这个组件,而是复用这个组件。如果想要在切换时进行一些操作,就需要在组件内部利用watch来监听路由的变化。注意5.5.1动态路由概述下面演示如何在About组件中监听路由的变化。在About组件中利用watch监听路由的变化。<scriptsetup>import{useRoute}from'vue-router'import{watch}from'vue'constroute=useRoute()watch(()=>route.path,path=>{
console.log('路由路径',path)})</script>5.5.1动态路由概述在浏览器中访问:5173/,依次单击子路由链接“tab1”和“tab2”,监听路由变化的效果,如下图所示。
先定一个小目标!掌握动态路径参数值的获取,能够使用$route.params或props获取参数值5.5.2获取动态路径参数值获取动态路径参数值的2种方式:使用$route.params获取参数值、使用props获取参数值。假设在Movie组件中有“电影1”“电影2”“电影3”这3个链接,单击它们会跳转到同一个MovieDetails组件,并展示对应的电影id,用于区分不用id对应的详情页的数据。5.5.2获取动态路径参数值步骤1使用$route.params获取参数值步骤3步骤4步骤2新建src\components\Movie.vue文件,在该文件中定义3个路由链接和路由视图。<template><divclass="movie-container"><router-linkto="/movie/1">电影1</router-link><router-linkto="/movie/2">电影2</router-link><router-linkto="/movie/3">电影3</router-link><router-view></router-view></div></template><style>.movie-container{路由链接路由视图5.5.2获取动态路径参数值步骤1使用$route.params获取参数值步骤3步骤4步骤2>>接上页代码min-height:150px;background-color:#f2f2f2;}.movie-containera{padding:05px;font-size:18px;border:1pxsolid#ccc;border-radius:5px;color:#000;margin:05px;}</style>5.5.2获取动态路径参数值5.5.2获取动态路径参数值<router-linkto="/movie">电影</router-link>步骤1步骤3步骤4步骤2修改src\App.vue文件,在“关于”路由链接下方补充定义“电影”路由链接。使用$route.params获取参数值目标地址5.5.2获取动态路径参数值<template><p>电影{{$route.params.id}}页面</p></template>步骤1步骤3步骤4步骤2创建src\components\MovieDetails.vue文件,使用$route.params.id获取参数id的值。使用$route.params获取参数值获取动态匹配的id参数的值5.5.2获取动态路径参数值修改src\router.js文件,在routes中添加路由匹配规则。步骤1步骤3步骤4步骤2routes:[{path:'/',redirect:'/movie'},//此处省略了/home和/about的路由代码
{path:'/movie',component:()=>import('./components/Movie.vue'),children:[{path:':id',component:()=>import('./components/movieDetails.vue')}]}]使用$route.params获取参数值在浏览器中访问:5173/。Movie组件初始页面效果、单击“电影1”链接,跳转到MovieDetails组件的效果,如下图所示。Movie组件初始页面效果跳转到MovieDetails组件5.5.2获取动态路径参数值5.5.2获取动态路径参数值使用props获取参数值:VueRouter允许在路由匹配规则中开启props传参。①修改src\components\MovieDetails.vue文件,使用props接收路由规则中匹配到的参数。<template>
<p>电影{{id}}页面</p></template><scriptsetup>constprops=defineProps({
id:String})</script>②在src\router.js文件中,为“:id”路径的路由开启props传参。{path:':id',component:()=>import('./components/movieDetails.vue'),props:true}命名路由5.6
先定一个小目标!掌握命名路由的使用方法,能够解释命名路由的实现5.6命名路由为什么使用命名路由?5.6命名路由使用路由时,一般会先在routes属性中配置路由匹配规则,然后在页面中使用<router-link>的to属性跳转到指定目标地址。但这种方式存在一些弊端,例如,当目标地址比较复杂时,不便于记忆;当地址发生变化时,需要同步修改所有使用了该地址的代码,会增加开发的工作量。为此,VueRouter提供了命名路由。5.6命名路由在定义路由匹配规则时,使用name属性为路由匹配规则定义路由名称,即可实现命名路由。当路由匹配规则有了路由名称后,在定义路由链接或执行某些跳转操作时,可以直接通过路由名称表示相应的路由,不再需要通过路由路径表示相应的路由。使用命名路由的语法格式如下。{path:'路由路径',name:'路由名称',component:组件}命名路由的name属性值不能重复,必须保证是唯一的。注意5.6命名路由在<router-link>标签中使用命名路由时,需要动态绑定to属性的值为对象。当使用对象作为to属性的值时,to前面要加一个冒号,表示使用v-bind指令进行绑定。在对象中,通过name属性指定要跳转到的路由名称,使用params属性指定跳转时携带的路由参数,语法格式如下。<router-link:to="{name:路由名称,params:{参数名:参数值}}"></router-link>5.6命名路由使用命名路由实现单击Home组件的“跳转到MovieDetails组件”链接跳转到MovieDetails组件,并在页面中获取id值。5.6命名路由步骤1演示如何使用命名路由步骤2在src\components\Home.vue文件中的<router-link>标签中动态绑定to属性的值,指定要跳转到的路由名称,并传递参数。<template>
<divclass="home-container">
<h3>Home组件</h3>
<router-link:to="{name:'MovieDetails',params:{id:3}}">跳转到MovieDetails组件</router-link>
</div></template>要跳转到MovieDetails路由5.6命名路由在src\router.js文件中,将“:id”路径的路由名称定义为MovieDetails。{path:':id',name:'MovieDetails',component:()=>import('./components/movieDetails.vue'),props:true}定义路由名称演示如何使用命名路由步骤1步骤25.6命名路由在浏览器中访问:5173/。单击“首页”链接后的页面效果、单击“跳转到MovieDetails组件”链接后的页面效果,如下图所示。单击“首页”链接后的页面效果单击“跳转到MovieDetails组件”链接后的页面效果5.6命名路由编程式导航5.7
先定一个小目标!掌握编程式导航的使用方法,能够灵活应用编程式导航5.7编程式导航什么是编程式导航?5.7编程式导航在Vue中,页面有两种导航方式,分别是声明式导航和编程式导航。其中,使用<router-link>标签定义导航链接的方式属于声明式导航。而编程式导航是先通过useRouter()函数获取全局路由实例,然后通过调用全局路由实例实现导航。5.7编程式导航VueRouter提供了useRouter()函数,使用它可以获取全局路由实例,该全局路由实例中提供了常用的push()方法、replace()方法和go()方法,获取全局路由实例的示例代码如下。<scriptsetup>import{useRouter}from'vue-router'constrouter=useRouter()</script>全局路由实例5.7编程式导航push()方法会向历史记录中添加一个新的记录,以编程方式导航到一个新的URL。当用户单击浏览器后退按钮时,会回到之前的URL。push()方法的参数可以是一个字符串路径,或者一个描述地址的对象,示例代码如下。router.push('/about/tab1') //字符串路径router.push({path:'/about/tab1'}) //带有路径的对象router.push({name:'user',params:{userId:'123'}}) //命名路由router.push({path:'/user',query:{id:'1'}}) //带查询参数,如:/user?id=1router.push({path:'/user',hash:'#admin'}) //带有Hash值,如:/user#admin1.push()方法5.7编程式导航如果在参数的对象中提供了path,则params会被忽略。为了传递参数,需要提供路由的name或者手动拼接带有参数的path,示例代码如下。constid='123'router.push({name:'/user',params:{userId}}) //跳转到/user/123router.push({path:`/user/${userId}`}) //跳转到/user/123//以下是params不生效的情况router.push({path:'/user',params:{userId}}) //跳转到/user5.7编程式导航使用push()方法实现单击Home组件的“跳转到MovieDetails组件”链接跳转到MovieDetails组件,并在页面中获取id值。5.7编程式导航演示push()方法的使用修改src\components\Home.vue文件,定义一个按钮,用于跳转到MovieDetails组件,并传递参数。<template><divclass="home-container"><h3>Home组件</h3><ahref="#"@click.prevent="gotoMovie(3)">跳转到MovieDetails组件</a></div></template>绑定gotoMovie()方法步骤1步骤25.7编程式导航在src\components\Home.vue文件中编写gotoMovie()方法,调用router.push()方法实现路由跳转,需要设置要跳转到的路由名称和携带的路由参数。<scriptsetup>import{useRouter}from'vue-router'constrouter=useRouter()constgotoMovie=movieId=>{router.push({name:'MovieDetails',params:{id:movieId}})}</script>演示push()方法的使用步骤1步骤25.7编程式导航replace()方法与push()方法类似,都是以编程方式导航到一个新的URL。replace()方法在导航后不会向历史记录中添加新的记录,而是会替换历史记录中的当前记录。//编程式导航router.replace({path:'/user'})<!--声明式导航--><router-link:to="{path:'/user'}"replace></router-link>5.7编程式导航2.replace()方法在声明式导航中,为<router-link>标签添加replace属性也能实现与replace()方法类似的效果,示例代码如下。go()方法用于实现前进或后退的效果,其参数表示历史记录中前进或后退的步数,类似于window.history.go(),相应的地址栏也会发生改变。go(1)表示前进一条记录。go(-1)表示后退一条记录。5.7编程式导航3.go()方法使用go()方法实现单击MovieDetails组件的“后退”按钮后返回到Home组件的效果。5.7编程式导航演示go()方法的使用修改src\components\MovieDetails.vue文件,在该文件中定义一个按钮,用于后退到上一个组件页面。<template><p>电影{{id}}页面</p><button@click="goBack">后退</button></template>绑定goBack()方法步骤1步骤25.7编程式导航在src\components\MovieDetails.vue文件中编写goBack()方法,调用router.go()方法实现后退效果。import{useRouter}from'vue-router'constrouter=useRouter()constgoBack=()=>{router.go(-1)}演示go()方法的使用步骤1步骤25.7编程式导航在浏览器中访问:5173/。先单击“首页”链接切换到首页,然后单击“跳转到MovieDetails组件”,查看添加了“后退”按钮的页面效果,如下图所示。单击“首页”链接后的页面效果单击“跳转到MovieDetails组件”的页面效果5.7编程式导航导航守卫5.8
先定一个小目标!掌握导航守卫的使用方法,能够实现路由访问权限的控制5.8导航守卫什么是导航守卫?5.8导航守卫导航守卫用于控制路由的访问权限。例如,访问后台主页时,需要用户处于已登录状态,如果没有登录,则跳转到登录页面。用户在登录页面进行登录操作,若登录成功,则跳转到后台主页;若登录失败,则返回登录页面。5.8导航守卫在登录功能中使用导航守卫的效果,如下图所示。5.8导航守卫导航守卫主要分为全局导航守卫、导航独享守卫和组件导航守卫。010203123包括全局前置守卫beforeEach()和全局后置守卫afterEach(),在路由即将改变前和改变后进行触发。全局导航守卫目前只有beforeEnter()守卫,只有在路由导航到一个不同的页面时才会被触发,beforeEnter()守卫只适用于单个路由。导航独享守卫包括beforeRouteEnter()、beforeRouteUpdate()、beforeRouteLeave()3个守卫,分别表示在路由进入之前被触发、在路由更新之前被触发、在路由离开之前被触发。组件导航守卫5.8导航守卫全局导航守卫会拦截每个路由规则,从而对每个路由进行访问权限的控制,定义全局导航守卫的示例代码如下。下面讲解全局导航守卫的定义与使用。constrouter=createRouter()router.beforeEach((to,from,next)=>{})router.afterEach((to,from,next)=>{})定义全局前置守卫定义全局后置守卫5.8导航守卫每个全局导航守卫方法中接收3个形参:to、from和next。to:表示目标路由对象;from:表示当前导航正要离开的路由对象;next:next为函数,如果不接收next()函数,则默认允许用户访问每一个路由;如果接收了next()函数,则必须调用next()函数,否则不允许用户访问任何一个路由。next()函数具有3种调用方式,分别为next()、next(false)和next('/'),其中,next()表示执行下一个钩子函数;next(false)表示强制停留在当前页面;next('/')表示跳转到其他地址。注意5.8导航守卫使用全局导航守卫实现当进入MovieDetails组件时,判断当前用户是否登录,如果没有登录则跳转到登录页面,如果已登录则跳转到电影详情页面。5.8导航守卫步骤1演示全局导航守卫的使用新建src\components\Login.vue文件,实现登录页面内容。<template>
<divclass="login-container">
登录页面
</div></template>步骤3步骤25.8导航守卫在src\router.js文件的routes中添加路由匹配规则,通过name属性定义Login组件路由规则的名称。{path:'/login',name:'Login',component:()=>import('./components/Login.vue')}步骤1步骤3步骤2演示全局导航守卫的使用5.8导航守卫在src\router.js文件中,在最后一行代码“exportdefaultrouter”的上一行位置注册全局导航守卫。router.beforeEach((to,from,next)=>{
letisLogin=false
if(=='MovieDetails'){
if(isLogin){next()
}else{
next({name:'Login'})
}
}else{next()
}})步骤1步骤3步骤2演示全局导航守卫的使用5.8导航守卫在浏览器中访问:5173/。先切换到首页,然后单击“跳转到MovieDetails组件”链接,会显示登录页面,说明全局导航守卫拦截成功,如下图所示。5.8导航守卫阶段案例——后台管理系统5.9
先定一个小目标!掌握后台管理系统,能够实现后台管理系统的开发5.9阶段案例——后台管理系统后台管理系统只允许具备管理权限的人员登录,登录成功后,才可以对网站进行管理。后台管理系统可以让用户在网页中通过简单的操作来实现对网站的管理,用户不需要掌握复杂的编程技能即可完成管理操作。后台管理系统分为登录页面、后台首页和用户详情页。5.9阶段案例——后台管理系统1.登录页面效果展示在“登录名称”输入框中填写“admin”,在“登录密码”输入框中填写“123456”,填写后,单击“登录”按钮,登录成功后将跳转到后台首页。5.9阶段案例——后台管理系统2.后台首页效果展示后台首页分为头部区域、左侧边导航部分和右侧内容部分。默认显示用户管理页面的内容,该页面包含了一个5行4列的用户管理表格,用于管理用户的编号、姓名、等级,在“操作”列可以单击“详情”链接来查看用户的详情。5.9阶段案例——后台管理系统3.用户详情页效果展示单击上图中编号为1的“详情”链接会跳转到该用户的详情页面。在该页面中单击“后退”按钮可以返回到上一个页面。5.9阶段案例——后台管理系统本章小结本章对路由相关知识进行了详细讲解,首先介绍了路由的基本概念;接着讲解了VueRouter的安装和基本使用;然后讲解了VueRouter的高级使用,包括路由重定向、嵌套路由、动态路由、命名路由、编程式导航和导航守卫;最后综合路由的相关知识讲解阶段案例“后台管理系统”。通过本章的学习,读者能够将所学技术运用到实际项目开发中。本章小结第6章常用UI组件库《Vue.js前端开发实战(第2版)》学习目标/Target
掌握ElementPlus组件库的安装方法,能够独立安装、配置ElementPlus掌握ElementPlus中常用组件的使用方法,能够实现按钮、表格、表单和菜单效果掌握Vant组件库的安装方法,能够独立安装、配置Vant学习目标/Target
掌握Vant中常用组件的使用方法,能够实现按钮、轮播、标签页、表单、网格和标签栏效果掌握AntDesignVue组件库的安装方法,能够独立安装、配置AntDesignVue掌握AntDesignVue中常用组件的使用方法,能够实现按钮和布局效果章节概述/Summary在前面介绍的内容中,网页的效果是通过CSS实现的,开发人员需要手动书写样式代码。UI组件库的出现可以帮助开发人员直接使用组件库中提供的功能来实现想要的效果,对于前端开发来说无疑是锦上添花。UI组件库不仅可以提高开发人员的工作效率,而且便于代码的维护,并能增强代码的规范性和唯一性。本章将详细讲解Vue3中常用UI组件库的基本使用方法与技巧。目录/Contents6.16.26.3ElementPlus组件库Vant组件库AntDesignVue组件库ElementPlus组件库6.1
先定一个小目标!掌握ElementPlus组件库的安装方法,能够独立安装、配置ElementPlus6.1.1安装ElementPlus什么是ElementPlus?6.1.1安装ElementPlusElementPlus是基于Vue3开发的优秀的PC端开源UI组件库,它是Element的升级版,对于习惯使用Element的人员来说,在学习ElementPlus时,不用花费太多的时间。因为Vue3不再支持IE11,所以ElementPlus也不再支持IE11及更低的IE版本。6.1.1安装ElementPlus6.1.1安装ElementPlus使用npm或yarn包管理工具安装ElementPlus。#使用npm包管理工具安装npminstallelement-plus--save#使用yarn包管理工具安装yarnaddelement-plus--save在Vue3项目中安装ElementPlus打开命令提示符,切换到D:\vue\chapter06目录,使用yarn创建一个名称为ui-component的项目。yarncreateviteui-component--templatevue项目名称6.1.1安装ElementPlus步骤1步骤3步骤4步骤2在Vue3项目中安装ElementPlus6.1.1安装ElementPlus步骤1步骤3步骤4步骤2在命令提示符中,切换到ui-component目录,为项目安装所有依赖。cdui-componentyarn在ui-component目录下使用yarn安装ElementPlus。yarnaddelement-plus@2.2.19--save@2.2.19表示安装element-plus的版本号项目运行时依赖在Vue3项目中安装ElementPlus6.1.1安装ElementPlus步骤1步骤3步骤4步骤2使用VSCode编辑器打开ui-component目录,在src\main.js文件中,导入并挂载ElementPlus模块。import{createApp}from'vue'import'./style.css'importElementPlusfrom'element-plus'import'element-plus/dist/index.css'importAppfrom'./App.vue'constapp=createApp(App)app.use(ElementPlus)app.mount('#app')在Vue3项目中安装ElementPlus步骤1步骤3步骤4步骤26.1.1安装ElementPlus执行命令启动服务。yarndev在Vue3项目中安装ElementPlus步骤1步骤3步骤4步骤26.1.1安装ElementPlus项目启动后,会默认开启一个本地服务,地址为:5173/。ElementPlus组件库中的组件主要包括基础组件、配置组件、表单组件、数据展示组件、导航和反馈组件以及其他组件。每个组件类别又进行了细分,例如,基础组件包含Button组件、Border组件、Container组件等;表单组件包含Form组件、Input组件等。下面对ElementPlus中常用的Button组件、Table组件、Form组件和Menu组件进行讲解。6.1.2ElementPlus中的常用组件6.1.2ElementPlus中的常用组件
先定一个小目标!掌握ElementPlus中Button组件的使用方法,能够实现按钮效果1.Button组件Button组件使用<el-button>标签定义,<el-button>标签的常用属性如下表所示。6.1.2ElementPlus中的常用组件属性名属性值描述typeprimary主要按钮success成功按钮info一般提示信息按钮warning警告按钮danger危险按钮plaintrue或false是否为朴素按钮,默认值为falseroundtrue或false是否为圆角按钮,默认值为falsedisabledtrue或false是否为禁用按钮,默认值为falselinktrue或false是否为链接按钮,默认值为falsecircletrue或false是否为圆形按钮,默认值为false如果需要设置plain、round或circle的属性值为true,可以写成“:属性名="true"”或“属性名”的形式。以round为例,示例代码如下。6.1.2ElementPlus中的常用组件<!--方式1--><el-buttontype="primary":round="true">Primary</el-button><!--方式2--><el-buttontype="primary"round>Primary</el-button>如果需要设置plain、round或circle的属性值为false,可以写成“:属性名="false"”的形式,或直接省略这些属性。注意演示基础的按钮效果创建src\components\Button.vue文件。<template><el-rowclass="mb-4"><el-button>Default</el-button><el-buttontype="primary">Primary</el-button><el-buttontype="success">Success</el-button><el-buttontype="info">Info</el-button><el-buttontype="warning">Warning</el-button><el-buttontype="danger">Danger</el-button></el-row><!--此处省略了两个<el-row></el-row>--></template>6.1.2ElementPlus中的常用组件步骤1步骤2修改src\main.js文件,切换页面中显示的组件,具体代码如下。importAppfrom'./components/Button.vue'组件的文件名6.1.2ElementPlus中的常用组件演示基础的按钮效果步骤1步骤2在浏览器中查看ElementPlus的按钮效果如下图所示。6.1.2ElementPlus中的常用组件步骤1演示链接按钮和禁用按钮的使用步骤2创建src\components\Button2.vue文件。<template><el-rowclass="mb-4"><el-buttonlink>Round</el-button><el-buttontype="primary"link:disabled="false">Primary</el-button><el-buttontype="success"link:disabled="true">Success</el-button><el-buttontype="info"link>Info</el-button><el-buttontype="warning"link>Warning</el-button><el-buttontype="danger"link>Danger</el-button></el-row></template>6.1.2ElementPlus中的常用组件修改src\main.js文件,切换页面中显示的组件。importAppfrom'./components/Button2.vue'组件的文件名6.1.2ElementPlus中的常用组件演示链接按钮和禁用按钮的使用步骤1步骤2在浏览器中查看ElementPlus的链接按钮和禁用按钮效果如下图所示。6.1.2ElementPlus中的常用组件6.1.2ElementPlus中的常用组件
先定一个小目标!掌握ElementPlus中Table组件的使用方法,能够实现表格效果ElementPlus组件库提供了Table组件,用于展示多条结构类似的数据,例如工资表、课程表和计划表等,可以对数据进行排序、筛选、对比或其他自定义操作。6.1.2ElementPlus中的常用组件2.Table组件Table组件使用<el-table>标签定义,在该标签中绑定data对象数组后,在<el-table-column>中使用prop属性对应对象中的键名,即可将数据添加到表格中;使用label属性可以定义表格的列名,使用width属性可以定义表格的宽高。<el-table>标签的常用属性如下表所示。6.1.2ElementPlus中的常用组件属性名描述data显示的数据stripe是否加斑马线,默认值为falseborder是否带有纵向边框,默认值为false演示基础的表格效果创建src\components\Table.vue文件。<template><el-table:data="tableData"stripeborderstyle="width:100%"><el-table-columnprop="date"label="日期"width="180"/><el-table-columnprop="name"label="姓名"width="180"/><el-table-columnprop="address"label="住址"width="300"/></el-table></template><scriptsetup>consttableData=[{date:'2023-02-03',name:'王五',address:'北京市海淀区'},//此处省略了3行数据]</script>6.1.2ElementPlus中的常用组件步骤1步骤2修改src\main.js文件,切换页面中显示的组件。importAppfrom'./components/Table.vue'组件的文件名6.1.2ElementPlus中的常用组件演示基础的表格效果步骤1步骤2在浏览器中查看ElementPlus的表格效果如下图所示。6.1.2ElementPlus中的常用组件6.1.2ElementPlus中的常用组件
先定一个小目标!掌握ElementPlus中Form组件的使用方法,能够实现表单效果大多数的网站中都涉及表单的应用,例如登录和注册页面。ElementPlus组件库提供了Form组件,该组件采用Flex布局,用于收集、验证和提交数据。基础的表单包含输入框、单选框、下拉选择、多选框等组件。6.1.2ElementPlus中的常用组件3.Form组件Form组件使用<el-form>标签定义,在该标签中使用<el-form-item>作为输入项的容器,用于获取值和验证值。<el-form>标签的常用属性如下表所示。6.1.2ElementPlus中的常用组件属性名描述inline行内表单模式,默认值为false,表示垂直表单label-position表单域标签的位置,默认值为right(标签右对齐),left表示标签左对齐,top表示标签位于表单域的顶部model表单数据对象当label-position属性设置为left或right时,需要设置label-width属性,否则label-position属性不生效。注意演示基础的表单效果创建src\components\Form.vue文件,在ElementPlus官方文档中找到Form组件的相关代码,复制部分核心代码到当前文件中。<template><el-form:model="form"label-width="80px"label-position="left"><el-form-itemlabel="用户名:"><el-inputv-model=""/></el-form-item><!--此处省略了两个<el-form-item></el-form-item>--></template><scriptsetup>import{reactive}from'vue'constform=reactive({pass:'',name:''})</script>6.1.2ElementPlus中的常用组件步骤1步骤2修改src\main.js文件,切换页面中显示的组件。importAppfrom'./components/Form.vue'组件的文件名6.1.2ElementPlus中的常用组件演示基础的表单效果步骤1步骤2在浏览器中查看ElementPlus的表单效果如下图所示。6.1.2ElementPlus中的常用组件表单默认为垂直表单,若想实现行内表单,可以修改步骤①的代码,为<el-from>标签添加inline属性,使表单元素并列显示。6.1.2ElementPlus中的常用组件<el-forminline:model="form"label-width="80px"label-position="left">属性在浏览器中查看表单内容横向排列效果如下图所示。6.1.2ElementPlus中的常用组件
先定一个小目标!掌握ElementPlus中Menu组件的使用方法,能够实现菜单效果导航栏是网页设计中不可或缺的一部分,通常应用于页面的顶部,可以帮助用户快速找到他们想要访问的内容。例如,导航栏可以实现页面之间的跳转。ElementPlus组件库提供了Menu组件,用于为网站提供导航功能。6.1.2ElementPlus中的常用组件4.Menu组件Menu组件使用<el-menu>标签定义,在该标签中包含<el-menu-item>和<sub-menu>标签。菜单默认为垂直模式,通过将mode属性值设为horizontal,可以将导航菜单变更为水平模式。<el-menu>标签的常用属性如下表所示。6.1.2ElementPlus中的常用组件属性名描述mode菜单展示模式,默认值为vertical(垂直模式),horizontal表示菜单为水平模式collapse是否水平折叠并收起菜单,默认值为falsebackground-color菜单的背景色text-color菜单的文字颜色,默认值为#303133active-text-color当前激活菜单的文字颜色,默认值为#409EFFdefault-active页面加载时默认激活菜单的index属性演示顶部菜单栏效果创建src\components\Menu.vue文件。<template><el-menuclass="el-menu-demo"mode="horizontal"><el-menu-itemindex="1">首页</el-menu-item><el-sub-menuindex="2"><!--此处省略了部分代码--></el-sub-menu><el-menu-itemindex="3"disabled>信息</el-menu-item><el-menu-itemindex="4">联系</el-menu-item></el-menu></template><scriptsetup>import{ref}from'vue'constactiveIndex=ref('1')</script>6.1.2ElementPlus中的常用组件步骤1步骤3步骤2修改src\main.js文件,切换页面中显示的组件。importAppfrom'./components/Menu.vue'组件的文件名6.1.2ElementPlus中的常用组件
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 酒店客房承包协议模板
- 施工免责任的协议书
- 食品代加工合作协议书
- 内衣分销商加盟2024年度合同
- 护理科研开题报告
- 围挡合同范本
- 2024年度发电机回收再利用服务合同
- 幼儿园师德师风主题教育活动方案
- 《降水专项方案》课件
- 护士6S管理培训资料
- 离婚协议书常用范本2024年
- 2024年各地中考语文卷【综合性学习题】汇集练附答案解析
- 个人情况说明怎么写
- 第20课 三国两晋南北朝时期的科技与文化-2024-2025学年初中历史七年级上册上课课件
- 名著导读 《昆虫记》教学设计2024-2025学年统编版语文八年级上册
- 数学-广东省2025届广州市高三年级上学期阶段性训练暨8月摸底考试试题和答案
- 2024年人民日报社招聘应届高校毕业生85人笔试(高频重点复习提升训练)共500题附带答案详解
- 《庖丁解牛》-中职高一语文教与学同步课件(高教版2023基础模块上册)
- 2024年新疆兵团第六师五家渠市事业单位招聘161人历年(高频重点提升专题训练)共500题附带答案详解
- 2024版防水保修协议书范本
- 2024-2030年中国人造假发行业竞争策略及未来发展前景展望报告
评论
0/150
提交评论