vue单页面应用的原理

vue单页面应用的原理通常的url地址由什么构成呢:协议名域名端口号路径参数哈希值比如:http://www.itcast.cn:80/home/index?name=zs#absdklfajdf当哈希值改变(哈希值就是:#absdklfajdf),页面不会发生跳转,单页面应用就是利用了这一点:单页面应用因为只有一个页面,所以页面不能发生跳转,但是,我们又需要根据url地址来展示不同的组件…

大家好,又见面了,我是你们的朋友全栈君。

通常的url 地址由什么构成呢:协议名 域名 端口号 路径 参数 哈希值

比如:http://www.itcast.cn:80/home/index?name=zs#absdklfajdf

当哈希值改变(哈希值就是:#absdklfajdf),页面不会发生跳转,单页面应用就是利用了这一点:

单页面应用因为只有一个页面,所以页面不能发生跳转,但是,我们又需要根据url地址来展示不同的组件

这个时候,只能用哈希值来表示究竟要展示哪个组件了

单页面应用就是根据hash值来改的

 给window注册onhashchange事件,当哈希值改变时通过location.hash就能获得相应的哈希值,然后就能跳到相应的页面:

<body>
    <div id="app">
      <component :is="currentPage"></component>
    </div>
    <script src="./node_modules/vue/dist/vue.js"></script>
    <script>

      // 设计用户访问的规则
      // #/login  访问登录页  要给用户展示login组件
      // #/register 访问注册页  要给用户展示register组件
      // #/list 列表页 要给用户展示list组件

      Vue.component("login", {
        template: `<div>
          <h1>这是登录页</h1>
          <input type="text"><input type="text"><button>登录</button>
        </div>`
      });

      Vue.component("register", {
        template: `<div>
          <h1>这是注册页</h1>
          <input type="text"><input type="text"><input type="text"><button>注册</button>
        </div>`
      });

      Vue.component("list", {
        template: `<div>
          <h1>这是列表页</h1>
          <input type="text"><input type="text"><button>登录</button>
        </div>`
      });

      const vm = new Vue({
        el: "#app",
        data: {
          currentPage: "login"
        },
        created() {
          window.onhashchange = () => {
            this.goPage()
          };
        },
        methods: {
          goPage() {
            switch (location.hash) {
              case "#/login":
                this.currentPage = "login";
                break;
              case "#/register":
                this.currentPage = "register";
                break;
              case "#/list":
                this.currentPage = "list";
                break;
            }
          }
        }
      });
    </script>
  </body>

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/148496.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Elasticsearch-精确查找

    Elasticsearch-精确查找

    2021年11月26日
    48
  • 5G基站产业链(5g基站天线安装视频)

    来源:国信证券5G宏基站数的翻倍增长及技术演进带来基站天线成倍增长空间。5G关键性能指标十倍的增长需要基站数翻倍增长以支撑。5G的三个关键的效率需求包括频谱利用效率、能耗…

    2022年4月17日
    98
  • 头文件cstring、string、string.h的区别「建议收藏」

    头文件cstring、string、string.h的区别「建议收藏」头文件cstring、string、string.h的区别<string>是C++标准库头文件,使用stirng类型必须首先包含string头文件,用于字符串操作,string类型可以进行+、=、+=、>等运算。std::string类实际上是STL模板类std::basic_string的具体化。#include<string>usingnamespacestd;strings;<cstring>是C标准库头文件<strin

    2025年9月3日
    3
  • 三态门(三态缓冲器)的工作原理[通俗易懂]

    三态门(三态缓冲器)的工作原理[通俗易懂]转载于http://www.eeworld.com.cn/mcu/article_2017102035218.html为减少信息传输线的数目,大多数计算机中的信息传输线均采用总线形式,即凡要传输的同

    2022年8月1日
    10
  • sstream读取文件

    sstream读取文件对于如下图所示的数据文件:274表示有274个点对,以下每一行代表一个点对,每一行的四个数从左到右依次是一个第一个点的x坐标、y坐标、第二个点的x坐标、y坐标,现在要把点对数和每个点对读取并存储,具体代码如下:#include<iostream>#include<sstream>#include<fstream>#include<string&…

    2022年6月4日
    47
  • L2-012关于堆的判断(堆)[通俗易懂]

    L2-012关于堆的判断(堆)[通俗易懂]堆题目链接将一系列给定数字顺序插入一个初始为空的小顶堆H[]。随后判断一系列相关命题是否为真。命题分下列几种:x is the root:x是根结点;x and y are siblings:x和y是兄弟结点;x is the parent of y:x是y的父结点;x is a child of y:x是y的一个子结点。输入格式:每组测试第1行包含2个正整数N(≤ 1000)和M(≤ 20),分别是插入元素的个数、以及需要判断的命题数。下一行给出区间[−10000,10000]内的N个要被

    2022年8月9日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号