关于js单页面实现跳转原理以及利用angularjs框架路由实现单页面跳转

还记得我们刚开始学习html时使用的锚节点实现跳转吗?

<a href="#target">我想跳转至目标位置</a>

<p>第一条</p>

....  
<p id="#target">我是目标位置</p>

...

在js中实现跳转也是利用了这一点,下面直接在代码中解释吧:

 1  <body>
 2     <ul>
 3         <li><a href="#/music">音乐</a></li>
 4         <li><a href="#/friend">朋友</a></li>
 5     </ul>
 6     <div id="view">
 7         <!--页面上需要修改的内容-->
 8     </div>
 9     </body>
10     <script>
11  window.addEventListener(‘hashchange‘, function(){   //hashchange 事件在当前 URL 的锚部分(以 ‘#‘ 号为开始) 发生改变时触发 。
12        console.log(location.hash);  //输出结果见下图:
13        var view=document.getElementById(‘view‘);  //获取页面中想要插入元素的id
14        switch(location.hash){
15          case ‘#/music‘:            //利用switch case来判断当前点击的锚节点是什么 ,同时设置相应的内容
16          view.innerHTML=‘音乐‘;
17          break;
18          case ‘#/friend‘:
19          view.innerHTML="朋友";
20          break;
21        }
22  })
23     </script>

接下来是在angulajs框架里如何使用路由切换实现单页面跳转:

直接代码中解释好了:

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>Title</title>
 6 </head>
 7 <body ng-app="myApp">
 8     <ul>
 9         <li><a href="#/first">第一种方式</a></li>
10         <li><a href="#/second">第二种方式</a></li>
11         <li><a href="#/third">第三种方式</a></li>
12         <li><a href="#/fourth">第四种方式</a></li>
13     </ul>
14     <div ng-view>
15         <!--页面上需要修改的内容-->
16     </div>
17 </body>
18 <script src="../../angular-1.5.8/angular.js"></script>
19 <script src="../../angular-1.5.8/angular-route.js"></script>
20 <script>
21    // 创建模块
22    var app=angular.module(‘myApp‘,[‘ngRoute‘]);
23
24    //写路由表
25    app.config(function($routeProvider){
26        $routeProvider
27         .when(‘/first‘,{
28            template:‘<h1>第一种方式:直接写入进来</h1>‘
29        })
30        .when(‘/second‘,{
31            template:‘<h1>{{secondWay}}</h1>‘,
32            controller:function($scope){ //这里是匿名的控制器
33              $scope.secondWay=‘第二种方式:使用匿名的controller的方式‘
34            }
35        })
36        .when(‘/third‘,{
37            template:‘<h1>{{thirdWay}}</h1>‘,
38            controller:‘myCtrl‘   //第三种方式:使用命名的myCtrl的控制器写入
39        })
40        .when(‘/fourth‘,{
41         templateUrl:‘mytemplate.html‘,
42        controller:‘myCtrl2‘
43        // 第四种方式:angularjs跳转到模板所在路径实现方法
44        })
45        //以下为当我们在地址栏输入错误的路径时处理的结果
46        // .otherwise({
47        //   template:‘<h1>{{extraError}}</h1>‘,
48        //   controller:function($scope){
49        //     $scope.extraError=‘这里是路径错误时产生的文字‘;
50        //   }
51        // })
52        //
53        //不过一般我们会默认的让它跳转到一个页面
54         .otherwise({
55             redirectTo:‘/first‘ //默认第一个单页面
56         });
57    })
58
59    //对应上面的第三种方式:有控制器名称的用法
60    app.controller(‘myCtrl‘,function($scope){
61      $scope.thirdWay=‘第三种方式:这是使用有名字的控制器的方法‘;
62    });
63    //对应上面的第四种写法:有控制器名称并链入模板页面
64    app.controller(‘myCtrl2‘,function($scope){
65      $scope.fourthWay=‘第四种方式:这是从外部html模板中获取的数据‘;
66    });
67 </script>
68 </html>

重要补充说明:

1.第四种方式需要在额外创建一个名为"mytemplate.html"的页面

(因为templateUrl属性值是一个url路径,路径指向一个html模板,html模板会填充(或替换)指令内容):

页面内容为:

2.在设置ng-app(angualar作用范围)时注意是放在body里面,我一开始放在了ul里,结果导致报错.

3.其次注意需要使用当有服务的代码编辑器打开,(webStorm可以)即地址栏是http://localhost:63342/...

如果直接打开,或者在(sublime)中运行,即以:file:///D:/ ...  就不是在服务器上运行那么它就会出错:显示:mytemplate.html那个页面无法加载:

个人理解,如有不足,希望各位大神留言补充~

时间: 2024-10-22 10:11:31

关于js单页面实现跳转原理以及利用angularjs框架路由实现单页面跳转的相关文章

利用angularjs完成注册表单

ng-init="username = 'first'"设置初始显示first字段 ng-class="{'error':signUpForm.username.$invalid && signUpForm.username.$touched}"验证表单是否未通过,touched验证是否有用过ng-if='signUpForm.username.$valid'输入合法即干...minlength="4" 最小四个字符maxleng

浅谈HTML5单页面架构(三)—— 回归本真:自定义路由 + requirejs + zepto + underscore

本文转载自:http://www.cnblogs.com/kenkofox/p/4650310.html 不过,这一篇,我想进一步探讨一下这两个框架的优缺点,另外,再进一步,抛开这两个框架,回到本真,自己搞个简单的路由一样可以实现单页面. 这个对于刚做前端开发的新同学来说就最好不过了,如果一来到岗位就一大堆angular.backbone.requirejs,看资料都看一两周.其实大家最熟悉的东西还是那个美元$,用美元能解决的问题,就不要麻烦到angular.backbone大爷了. 事先说明,

JS获取中文拼音首字母,并通过拼音首字母快速查找页面内的中文内容

实现效果: 图一: 图二: 此例中输入的中文字符串"万万保重",有三个字是多音字,所以alert对话框中显示的是多种读音的组合: 如何实现? 如何实现通过拼音首字母快速查找页面内的中文内容呢? 过程原理是这样的:例如要对一些人名进行快速查找,当页面加载完成后,对所有人名建立一个索引,生成拼音首字母与姓名的对应关系:然后监听键盘事件,当用户按下键盘时,根据键值得到按下的是哪个字母,然后遍历索引中是否存在相同的拼音首字母: 这里还实现了根据字母组合来查找的功能,原理是这样的:当用户按键时,

自制Javascript分页插件,支持AJAX加载和URL带参跳转两种初始化方式,可用于同一页面的多个分页和不同页面的调用

闲话部分 最近闲着实在无聊,就做了点小东西练练手,由于原来一直在用AspNetPager进行分页,而且也进行了深度的定制与原有系统整合的也不错,不过毕竟是用别人的,想着看自己能试着做出来不能,后台的分页插件已经有比较成熟的了,那就自己试着写一个前台分页吧. 话不多说,先上效果图: 优点与缺点 来说说优缺点吧,首先AspNetPager是后台分页控件,所以在向客户端回传HTML文档之前生成HTML阶段 就会把分页代码生成完毕,然后回传,而JS是前端代码,就是HTML文档在服务器组织完毕往客户端传送

js/ajax跨越访问-jsonp的原理和实例(javascript和jquery实现代码)

最近做了一个项目,需要用子域名调用主域名下的一个现有的功能,于是想到了用jsonp来解决,在我们平常的项目中不乏有这种需求的朋友,于是记录下来以便以后查阅同时也希望能帮到大家,需要了解的朋友可以参考下 很庆幸,我又见到了末日后新升的太阳,所以我还能在这里写文章,言归正传哈,最近做了一个项目,需要用子域名调用主域名下的一个现有的功能,于是想到了用jsonp来解决,在我们平常的项目中不乏有这种需求的朋友,于是记录下来以便以后查阅同时也希望能帮到大家. 什么是JSONP协议? JSONP即JSON w

vue-router+webpack线上部署时单页项目路由,刷新页面出现404问题

使用vue项目,线上部署的时候,访问首页以及通过路由打开二级页面没有问题,但是一刷新就出现404现象 因为刷新页面时访问的资源在服务端找不到,因为vue-router设置的路由不是真实存在的路径. 解决办法是:在nginx.conf配置修改如下: location / { root html; try_files $uri $uri/ @router; index index.html index.htm; } location @router { rewrite ^.*$ /index.htm

dwz框架---(2)表单回调函数

dwz中的表单回调函数大概有以下几种: /** * 普通ajax表单提交 * @param {Object} form * @param {Object} callback * @param {String} confirmMsg 提示确认信息 */ function validateCallback(form, callback, confirmMsg) { var $form = $(form); if (!$form.valid()) { return false; } var _subm

如何利用jQuery进行简单表单验证

如何利用jQuery进行简单表单验证:利用jQuery可以进行表单验证,当然有比较复杂的表单验证,这里就不介绍了,下面就简单介绍一下如何使用jQuery进行简单的表单验证,然后大家可以通过改造进行基本的表达验证了.先看一段代码实例: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="author" content="http

angularJs 跨控制器与跨页面传值

虽然网上概括了四种或更多的传值方式,但我现在用的顺手的就两种 首先要知道AngularJs可以构建一个单页面应用程序,所以我划分为跨控制器传值 和 跨页面传值 两类 1.跨控制器传值—— $rootScope 原理:所有的应用都有一个 $rootScope,它可以作用在 ng-app 指令包含的所有 HTML 元素中. $rootScope 可作用于整个应用中.是各个 controller 中 scope 的桥梁.用 rootscope 定义的值,可以在各个 controller 中使用 应用: