• 05-vue-cli-路由配置


    一、vue-router 路由

    1.vue-router是什么

            这里的路由并不是指我们平时所说的硬件路由器,这里的路由就是SPA(单页应用)的路径管理器。再通俗 的说,vue-router就是WebApp的链接路径管理系统。

            vue-router是Vue.js官方的路由插件,它和vue.js是深度集成的,适合用于构建单页面应用。vue的单页面应 用是基于路由和组件的,路由用于设定访问路径,并将路径和组件映射起来。传统的页面应用,是用一些超链接 来实现页面切换和跳转的。在vue-router单页面应用中,则是路径之间的切换,也就是组件的切换。路由模块的 本质 就是建立起url和页面之间的映射关系。

            至于我们为啥不能用a标签,这是因为用Vue做的都是单页应用(当你的项目准备打包时,运行 npm run build 时,就会生成dist文件夹,这里面只有静态资源和一个index.html页面),所以你写的标签是不起作用 的,你必须使用vue-router来进行管理

    二、vue-router-实现原理

            SPA(single page application):单一页面应用程序,只有一个完整的页面;它在加载页面时,不会加载整个页 面,而是只更新某个指定的容器中内容。

            单页面应用(SPA)的核心之一是: 更新视图而不重新请求页面;

            vue-router在实现单页面前端路由时,提供了两种方式:Hash模式和History模式;根据mode参数来决定采用 哪一种方式。

    1、Hash模式,#锚点

            vue-router 默认 hash 模式 —— 使用 URL 的 hash 来模拟一个完整的 URL,于是当 URL 改变时,页面不会重 新加载。 hash(#)是URL 的锚点,代表的是网页中的一个位置,单单改变#后的部分,浏览器只会滚动到相应 位置,不会重新加载网页,也就是说hash 出现在 URL 中,但不会被包含在 http 请求中,对后端完全没有影响, 因此改变 hash 不会重新加载页面;同时每一次改变#后的部分,都会在浏览器的访问历史中增加一个记录,使 用”后退”按钮,就可以回到上一个位置;所以说Hash模式通过锚点值的改变,根据不同的值,渲染指定DOM位 置的不同数据。hash 模式的原理是 onhashchange 事件(监测hash值变化),可以在 window 对象上监听这个事

    件。

    2、History模式,传统模式,/

            由于hash模式会在url中自带#,如果不想要很丑的 hash,我们可以用路由的 history 模式,只需要在配置路

            由规则时,加入"mode: 'history'",

            在router目录下的index.js文件,添加history 模式这个时候地址栏里可以不要#号了

    三、vue-router-404页面

            当我们使用History模式, 如果用户输错页面地址,返回的页面是空白,很不友好。

            当用户输错页面时,我们希望给他一个友好的提示页面,这个页面就是我们常说的404页面。vue-router也为 我们提供了这样的机制

    1 创建error404.vue页面

    1. <script>
    2. script>
    3. <style>
    4. style>

    2 在路由目录下的index.js 引入error组件

    1. import Vue from 'vue'
    2. import Router from 'vue-router'
    3. /* 配置地址,叫组件
    4. 第一种:导入hello组件
    5. */
    6. import error404 from '../components/demo/error404.vue'
    7. Vue.use(Router)
    8. export default new Router({
    9. // 切换到history模式
    10. mode:"history",
    11. routes: [
    12. {
    13. path: '*', //*,通配所有的错误地址
    14. name: 'error404',
    15. component: error404
    16. },
    17. ]
    18. })

    3 配置error路由地址,地址* 通配所有错误地址

    1. {
    2. path: '*', //*,通配所有的错误地址
    3. name: 'error404',
    4. component: error404
    5. },

    4 完毕,如果输入错误路由地址,就会看到error页面信息

    四、vue-router-路由导航

    1. 编程式的导航

    2. 声明式的导航

    1.编程式的导航

    1.1第一种: this.$router.replace()函数

    //第一种:指定路由的name完成页面跳转

            this.$router.replace({name:"表格组件"})

    //第二种:指定路由的path完成页面跳转

            this.$router.replace("/table")

    replace:是不能回退的,银行系统不能用。安全性更高

    1. <script>
    2. export default {
    3. name:"testLogin",
    4. methods:{
    5. test01(){
    6. //replace以url作为参数
    7. this.$router.replace("/testIndex");
    8. },
    9. test02(){
    10. //replace以name作为参数
    11. this.$router.replace({"name":"testIndex"});
    12. },
    13. }
    14. }
    15. script>
    16. <style>
    17. style>

    1.2 第二种: this.$router.push()函数

    //第一种:指定路由的name完成页面跳转

            this.$router.push({name:"表格组件"})

    //第二种:指定路由的path完成页面跳转

            this.$router.push("/table")

    push:可以回退到上一个页面,安全性不高

    1. <script>
    2. export default {
    3. name:"testLogin",
    4. methods:{
    5. test03(){
    6. //push以url作为参数
    7. this.$router.push("/testIndex");
    8. },
    9. test04(){
    10. //push以url作为参数
    11. this.$router.push({"name":"testIndex"});
    12. },
    13. }
    14. }
    15. script>
    16. <style>
    17. style>

    1.3.$router.push 和 $router.replace 的区别:

            使用push方法的跳转会向 history 栈添加一个新的记录,当我们点击浏览器的返回按钮时可以看到之前的页面。

            使用replace方法不会向 history 添加新记录,而是替换掉当前的 history 记录,即当replace跳转到的网页后,‘后退’按钮不能查看之前的页面。

    2.编程式导航传参

    2.1 在testLogin组件 定义导航

            把 one的值 传到testIndex组件中

    1. test02(){
    2. //replace以name作为参数
    3. this.$router.replace({
    4. "name":"testIndex",
    5. query:{
    6. "name":this.userName,
    7. "pwd":"123",
    8. },
    9. });
    10. },
    11. test04(){
    12. //push以url作为参数
    13. this.$router.push({
    14. "name":"testIndex",
    15. query:{"name":this.userName},
    16. });
    17. },

    2.2 在testIndex组件中接收传值

    1. $route.query.one ,在页面取值如下:

    2.3 在testIndex的js代码中取值

    3.声明式的导航

    1. 声明式导航

    2. //指定路由的name完成页面跳转
    3. <router-link :to="{'name':'testIndex'}">1:页面跳转不传值router-link>

    4.声明式导航传参

    1. 在 testLogin 组件 定义一个标签要把 'userName' 传到testIndex组件中

    1. 声明式导航

    2. <router-link :to="{'name':'testIndex',query:{'name':userName}}">2:页面跳转传值router-link>

    2. 在testIndex组件中接收传值 : $route.query.one ,在页面取值如下:

    3.在testIndex的js代码中取值

  • 相关阅读:
    日记:WinUI3打包成.msix
    ES6、ES7、ES8、ES9、ES10、ES11
    基于动态分级策略的改进正余弦算法-附代码
    CentOS 编译安装TinyXml2
    【分布式金融交易模型】账户开立
    基于RBF神经网络的多输入单输出回归分析
    【Nginx41】Nginx学习:Stream四层负载均衡浅尝及总结
    【信创】银河麒麟V10 安装postgis
    TypeScript学习第二天:认识ts的数据类型
    【ARM Coresight 系列文章 21 -- SoC-400 介绍 】
  • 原文地址:https://blog.csdn.net/weixin_46048259/article/details/127461812