| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> JavaScript知识库 -> vue从入门到精通之【vue-router】(八) -> 正文阅读 |
|
[JavaScript知识库]vue从入门到精通之【vue-router】(八) |
vue从入门到精通之【vue-router】(八) ? 前端路由(vue-router/react-router-dom) 单页面应用& 多页面应用「SPA(single page application)单页面应用」:一个项目只有一个页面,我们基于路由,控制页面展示不同的片段(或组件),当展示内容改变的时候,页面并不会刷新!! 「MPA(multi page application)多页面应用」:一个项目有很多页面,我们做的是页面之间的跳转,每一次跳转都是打开新的页面(相当于页面刷新了)。 单页面应用的项目:移动端大部分都是(追求原生app的操作 体验)、PC端的管理系统 多页面应用的项目:PC端非管理系统的产品。 基于JS动态绑定的内容(vue框架都是这样处理的),在页面的源代码中是看不到内容的,不利于SEO搜索引擎优化!!想做SEO优化,需要服务器渲染(前后端不分离、「现在主流的服务器渲染SSR:node+vue(nuxt.js)+react(next.js)」)!!
前端路由的模式「哈希路由(hash router):监听URL地址后面的hash值」 ○ 点击按钮改变url地址栏中的hash值改变,控制#app中的内容改变 「浏览器路由(brower/history router):基于H5中的history api实现的」 ○ 可以改变URl地址,但是页面不刷新; ○ 如果手动刷新页面,这个地址不存在,报404;需要服务器支持,如果地址不存在,不要返回404,依然返回主页面。 「区别:」 ○ hash路由地址不好看,brower路由好看一些; ○ 实现机制不同 ? ○ brower跳转的路由并不真实存在,所以页面手动刷新,会出现404,此时需要后台服务器的配合【后台:如果地址不存在,返回主页的内容】 vue脚手架基于webpack-dev-server启动服务(开发环境),已经完成了服务器应该对history模式支持的相关操作;但是打包到服务器上(生产环境),没有webpack-dev-server,此时需要服务器基于nginx做相同的配置支持。 vue路由安装
步骤「创建路由规则表」 src/router/index.js
src/router/routes.js 管理项目路由表
main.js注册使用路由表
实现路由跳转(改变URL地址或者哈希值) 设定一个容器,可以在指定的位置,把基于路由规则匹配的组件进行渲染 「router-view」 router-view内置组件(路由容器):渲染"基于路由规则匹配的组件"的 当页面刷新或者路由跳转后,vue都会拿URL最新的地址(或hash值)去路由表匹配,把匹配到的组件,放到router-view容器中渲染! 每一次的路由切换都是把上一个渲染的组件释放(销毁beforeDestroy->destroyed),把新匹配的组件进行渲染(beforCreate->created->beforeMonut->mounted) 「router-link to="/"」 router-link内置组件(路由跳转、切换组件) 目的:点击实现路由跳转,基于"to"属性指定跳转地址 页面渲染的时候,会把router-link渲染为A标签 页面刷新或路由切换,都会拿最新的地址(或哈希值)和每一个router-link中to的值(或者path属性值)进行匹配,完全匹配""精准"匹配,会给A标签设置router-link-exact-active router-link-active类;非""精准"匹配,只设置router-link-active类;一点都没匹配,啥样式都不设置。==>我们后期可以基于这个特点,给当前匹配的导航设置选中样式。 页面地址:/order to的地址: / 非精准匹配(包含一个完整的)
/analyse 完全不匹配 /order 精准匹配{一毛一样}
vue性能优化方案路由懒加载如果在编写路由表的时候,事先导入了所有的组件,根据规则渲染不同的组件,这样最后build的时候,会把所以导入的组件打包到一个JS中,JS文件较大,页面第一次加载请求JS的时间过长,延长了白屏等待的时间。 路由懒加载,依托于ES6中提供的import函数
route router当我们在new Vue({})的时候,会给每个组件(vue 实例)注入两个私有属性 ● this.$route:存储路由匹配的信息 ● this.$router:VueRouter的实例,可以调用
● $route ? ● $router ? 路由切换/路由跳转的传参方式路由切换/路由跳转的传参方式:每一次路由切换,想把一些信息传递给下一个组件 A组件跳转到B组件 问号传参#/xxx?xxx==xxx 【丑&能在地址栏中看到传递的信息】因为在地址栏中有,即使手动刷新B页面,信息还可以获取到 隐式传参● #/xxx 【地址栏中看不见,从内部把信息传递过去&&需要基于路由名字跳转,基于path跳转不可以】建议大家后期在编写路由表的时候,给每一个路由设置一个唯一的名字-->"命名路由",后期实现路由跳转可以不基于path,基于name也可以跳转(可以隐式传参) 因为传递的信息在地址栏中不存在,所以在B页面刷新,传递的信息都没有了 路径参数● #/xxx/数据 把需要传递的数据当作路由地址的一部分【常用的方案】 ○ 第一步:设置路由表 :xxx设置动态的规则 ○ 第二步:跳转 this.$router.push('/home/customass/100/aa') ○ 第三步:获取 this.$router.params --->{id:100,name:'aa'} 特殊情况:跳转前后是同一个组件路由切换的时候,要释放上一个组件和即将渲染的下一个组件,是同一个组件,此时这个组件既不会被释放也不会被重新渲染,第一次渲染的逻辑不会触发了,例如:created就不会执行了 ● 解决方法1:基于watch监听路由变化,从而做一些事情
● 解决方法2:computed 把需要依赖的路由由变化而变化的信息,都设置为计算属性
路由导航守卫在每一次页面刷新(或者路由跳转),路由进行规则匹配的时候,也会触发一些钩子函数==>导航守卫函数 「完整的导航解析流程 A组件-->B组件」
路由元信息meta:{} 路由元信息:记录每一个路由表的一些基础信息【自定义】 ● this.$route.mate 获取 ● 根据每个路由表中的记录的不同的元信息,做不同的事情 |
|
JavaScript知识库 最新文章 |
ES6的相关知识点 |
react 函数式组件 & react其他一些总结 |
Vue基础超详细 |
前端JS也可以连点成线(Vue中运用 AntVG6) |
Vue事件处理的基本使用 |
Vue后台项目的记录 (一) |
前后端分离vue跨域,devServer配置proxy代理 |
TypeScript |
初识vuex |
vue项目安装包指令收集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 12:26:53- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |