Vue的路由

Vue的路由实现:hash模式 和 history模式
hash模式:在浏览器中符号“#”,#以及#后面的字符称之为hash,用window.location.hash读取;
特点:hash虽然在URL中,但不被包括在HTTP请求中;用来指导浏览器动作,对服务端安全无用,hash不会重加载页面。
hash 模式下,仅 hash 符号之前的内容会被包含在请求中,如 http://www.xxx.com,因此对于后端来说,即使没有做到对路由的全覆盖,也不会返回 404 错误。

history模式:history采用HTML5的新特性;且提供了两个新方法:pushState(),replaceState()可以对浏览器历史记录栈进行修改,以及popState事件的监听到状态变更。
history 模式下,前端的 URL 必须和实际向后端发起请求的 URL 一致,如 http://www.xxx.com/items/id。后端如果缺少对 /items/id 的路由处理,将返回 404 错误。Vue-Router 官网里如此描述:“不过这种模式要玩好,还需要后台配置支持……所以呢,你要在服务端增加一个覆盖所有情况的候选资源:如果 URL 匹配不到任何静态资源,则应该返回同一个 index.html 页面,这个页面就是你 app 依赖的页面。”

vue路由的钩子函数
首页可以控制导航跳转,beforeEach,afterEach等,一般用于页面title的修改。一些需要登录才能调整页面的重定向功能。
beforeEach主要有3个参数to,from,next:
to:route即将进入的目标路由对象,
from:route当前导航正要离开的路由
next:function一定要调用该方法resolve这个钩子。执行效果依赖next方法的调用参数。可以控制网页的跳转。

案例代码

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>hash 实现前端路由</title>
  <style>
    #nav {
      margin: 0;
      border:0;
      height: 40px;
      border-top: #060 2px solid;
      margin-top: 10px;
      border-bottom: #060 2px solid;
      background-color: red;
    }
    #nav ul {
      margin: 0;
      border: 0;
      list-style: none;
      line-height: 40px;
    }
    #nav li {
      display: block;
      float: left;
    }

    #nav a {
      display: block;
      color: #fff;
      text-decoration: none;
      padding: 0 20px;
    }

    #nav a:hover {
      background-color: orange;
    }

  </style>
</head>
<body>
  <h3>使用 hash 实现前端路由</h3>
  <hr/>
  <a href="#hash1">#hash1</a>
  <a href="#hash2">#hash2</a>
  <a href="#hash3">#hash3</a>
  <a href="#hash4">#hash4</a>
  <p/>
  <div id = "show-hash-result" style="color:blue">
   点击上面链接,并观察浏览器
  </div>
  <h4>定义一个简单的 tab 路由页面</h4>
  <div id="nav">
    <ul>
      <li><a href="#/index.html">首页</a></li>
      <li><a href="#/server">服务</a></li>
      <li><a href="#/mine">我的</a></li>
    </ul>
  </div>
  <div id="result"></div>
  <script type="text/javascript">
  window.addEventListener("hashchange", function(){
    //变化后输出当前地址栏中的值
    document.getElementById("show-hash-result").innerHTML = "当前的 hash 值是:  "+location.hash;
    //打印出当前 hash 值
    console.log("当前的 hash 值是:"+window.location.hash) ;
    });
  </script>

<!-- 定义 router 的 js 代码块 -->
  <script type="text/javascript">
  //自定义一个路由规则
  function CustomRouter(){
   this.routes = {};
   this.curUrl = '';

   this.route = function(path, callback){
       this.routes[path] = callback || function(){};
   };

   this.refresh = function(){
       if(location.hash.length !=0){ // 如果 hash 存在
         this.curUrl = location.hash.slice(1) || '/';
         if(this.curUrl.indexOf('/')!=-1){ //这里粗略的把 hash 过滤掉
             this.routes[this.curUrl]();
         }
       }
   };

   this.init = function(){
       window.addEventListener('load', this.refresh.bind(this), false);
       window.addEventListener('hashchange', this.refresh.bind(this), false);
   }
  }

  //使用路由规则
  var R = new CustomRouter();
  R.init();
  var res = document.getElementById('result');

  R.route('/hash1',function () {
   document.getElementById("show-hash-result").innerHTML = location.hash;
  })

  R.route('/index.html', function() {
   res.style.height='150px';
   res.style.width='300px';
   res.style.background = 'green';
   res.innerHTML = '<html>我是首页</html>';
  });

  R.route('/server', function() {
   res.style.height='150px';
   res.style.width='300px';
   res.style.background = 'orange';
   res.innerHTML = '我是服务页面';
  });
  R.route('/mine', function() {
   res.style.background = 'red';
   res.style.height='150px';
   res.style.width='300px';
   res.innerHTML = '我的界面';
  });
  </script>
</body>
</html>
内容概要:本文档详细介绍了基于事件触发扩展状态观测器(ESO)的分布式非线性车辆队列控制系统的实现。该系统由N+1辆车组成(1个领头车和N个跟随车),每辆车具有非线性动力学模型,考虑了空气阻力、滚动阻力等非线性因素及参数不确定性和外部扰动。通过事件触发ESO估计总扰动,基于动态面控制方法设计分布式控制律,并引入事件触发机制以减少通信和计算负担。系统还包含仿真主循环、结果可视化等功能模块。该实现严格遵循论文所述方法,验证了观测误差有界性、间距误差收敛性等核心结论。 适合人群:具备一定编程基础,对非线性系统控制、事件触发机制、扩展状态观测器等有一定了解的研发人员和研究人员。 使用场景及目标:①研究分布式非线性车辆队列控制系统的理论与实现;②理解事件触发机制如何减少通信和计算负担;③掌握扩展状态观测器在非线性系统中的应用;④学习动态面控制方法的设计与实现。 其他说明:本文档不仅提供了详细的代码实现,还对每个模块进行了深入解析,包括非线性建模优势、ESO核心优势、动态面控制与传统反步法对比、事件触发机制优化等方面。此外,文档还实现了论文中的稳定性分析,通过数值仿真验证了论文的核心结论,确保了系统的稳定性和有效性。建议读者在学习过程中结合代码进行实践,并关注各个模块之间的联系与相互作用。
内容概要:本文档《c预约面试大全.pdf》汇集了大量C语言及其相关领域的面试问题与解答,涵盖了从基础概念到高级技巧的广泛知识点。主要内容包括但不限于:C语言的基础语法(如static关键字的作用、指针与引用的区别)、数据结构(如平衡二叉树、链表操作)、算法(如冒泡排序的时间复杂度)、计算机网络(如TCP/IP协议栈)、操作系统(如进程和线程的区别)、内存管理(如堆栈差异)等方面。此外,还涉及了一些较为复杂的主题,例如位域的应用、编译原理中的预编译概念、以及针对特定问题的编程实现(如寻找数组中的重复数字、实现约瑟夫环问题等)。每个问题都配有详细的解释或代码示例,旨在帮助求职者全面准备C语言相关的技术面试。 适合人群:正在准备C语言及相关领域(如嵌入式开发、系统编程)工作的求职者,尤其是有一定编程基础但缺乏实战经验的技术人员。 使用场景及目标:①帮助读者深入理解C语言的核心概念和技术细节;②通过实际案例分析提升解决复杂问题的能力;③为参加各类技术面试做好充分的知识储备和心理准备。 其他说明:此文档不仅包含了理论知识,还提供了大量实战练习的机会,鼓励读者动手实践,从而更好地掌握所学内容。同时,文档中的问题难度逐步递增,适合不同层次的学习者按需选择。由于C语言是许多高级编程语言的基础,因此这份资料对于想要深入学习计算机科学的学生也非常有价值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值