angularJS 服务三

路由

一 简介

1.路由机制

为了实现无刷新的视图切换,我们通常会用ajax请求从后台取数据,然后套上HTML模板渲染在页面上,然而ajax的一个致命缺点就是导致浏览器后退按钮失效,尽管我们可以在页面上放一个大大的返回按钮,让用户点击返回来导航,但总是无法避免用户习惯性的点后退。解决此问题的一个方法是使用 hash,监听hashchange事件来进行视图切换,另一个方法是用HTML5的history API,通过pushState()记录操作历史,监听popstate事件来进行视图切换,也有人把这叫pjax技术。

2.angularJS中路由机制的原理

ng的路由机制是靠ngRoute提供的,通过hash和history两种方式实现了路由,可以检测浏览器是否支持history来灵活调用相应的方式。ng的路由(ngRoute)是一个单独的模块,包含以下内容:

服务$routeProvider用来定义一个路由表,即地址栏与视图模板的映射

服务$routeParams保存了地址栏中的参数,例如{id : 1, name : ‘tom‘}

服务$route完成路由匹配,并且提供路由相关的属性访问及事件,如访问当前路由对应的controller

指令ngView用来在主视图中指定加载子视图的区域

以上内容再加上$location服务,我们就可以实现一个单页面应用了。

二 使用

1.引入文件和依赖

<script src="http://code.angularjs.org/1.2.5/angular.min.js"></script>

<script src="http://code.angularjs.org/1.2.5/angular-route.min.js"></script>

var app = angular.module(‘MyApp‘, [‘ngRoute‘]);

2.路由功能是由 routeProvider服务 和 ng-view 搭配实现,ng-view相当于提供了页面模板的挂载点,当切换URL进行跳转时,不同的页面模板会放在ng-view所在的位置; 然后通过 routeProvider 配置路由的映射。

3.一般主要通过两个方法:

when():配置路径和参数;

otherwise:配置其他的路径跳转,可以想成default。

4.when的第二个参数:

controller:对应路径的控制器函数,或者名称

controllerAs:给控制器起个别名

template:对应路径的页面模板,会出现在ng-view处,比如"<div>xxxx</div>"

templateUrl:对应模板的路径,比如"src/xxx.html"

resolve:这个参数着重说下,该属性会以键值对对象的形式,给路由相关的控制器绑定服务或者值。然后把执行的结果值或者对应的服务引用,注入到控制器中。如果resolve中是一个promise对象,那么会等它执行成功后,才注入到控制器中,此时控制器会等待resolve中的执行结果。

redirectTo:重定向地址

reloadOnSearch:设置是否在只有地址改变时,才加载对应的模板;search和params改变都不会加载模板

caseInsensitiveMatch:路径区分大小写

5.路由有几个常用的事件:

$routeChangeStart:这个事件会在路由跳转前触发

$routeChangeSuccess:这个事件在路由跳转成功后触发

$routeChangeError:这个事件在路由跳转失败后触发

三 举例

HTML部分:

<div ng-controller="myCtrl">

<ul>

<li><a href="#/a">click a</a></li>

<li><a href="#/b">click b</a></li>

</ul>

<ng-view></ng-view>

<!-- <div ng-view ></div> -->

</div>

JS部分:

<script type="text/javascript">

angular.module("myApp",["ngRoute"])

.controller("aController",function($scope,$route){

$scope.hello = "hello,a!";

})

.controller("bController",function($scope){

$scope.hello = "hello,b!";

})

.controller("myCtrl",function($scope,$location){

$scope.$on("$viewContentLoaded",function(){

console.log("ng-view content loaded!");

});

$scope.$on("$routeChangeStart",function(event,next,current){

//event.preventDefault(); //cancel url change

console.log("route change start!");

});

})

.config(function($routeProvider, $locationProvider) {

$routeProvider

.when(‘/a‘, {

templateUrl: ‘a.html‘,

controller: ‘aController‘

})

.when(‘/b‘, {

templateUrl: ‘b.html‘,

controller: ‘bController‘,

resolve: {

// I will cause a 3 second delay

delay: function($q, $timeout) {

var delay = $q.defer();

$timeout(delay.resolve, 3000);

return delay.promise;

}

}

})

.otherwise({

redirectTo: ‘/a‘

});

});

</script>

再增加两个HTML页面:

a.html

<div ng-controller="aController" style="height:500px;width:100%;">{{hello}}</div>

b.html

<div ng-controller="bController" style="height:2500px;width:100%;">{{hello}}</div>

其中,/b路径中的resolve关联来一个延迟方法,这个方法返回的时Promise对象,而且3秒钟后才会返回结果。因此b页面,在3秒后才会加载成功。

时间: 2024-08-01 22:43:06

angularJS 服务三的相关文章

使用AngularJS的三个重要原因

入门教程:http://www.ituring.com.cn/minibook/303 : http://angularjs.cn/tag/AngularJS 原因一:Google开发的框架 要知道开源界的很多框架都是开发人员由于个人兴趣或者激情而开发出来的,比如,Cappucino 还有 Knockout.而anguar.js是由互联网巨人Google组织开发的.这意味这你有更加强大的社区支持.谁都不希望第一天开始使用一个框架,第二天发现这个框架已经被遗弃了吧! 其实这不是Google第一次尝

AngularJS进阶(三十九)基于项目实例解析ng启动加载过程

基于项目实例解析ng启动加载过程 前言 在AngularJS项目开发过程中,自己将遇到的问题进行了整理.回过头来总结一下angular的启动过程. 下面以实际项目为例进行简要讲解. 1.载入ng库 2.等待,直到DOM树构造完毕. 3.发现ng-app,自动进入启动引导阶段. 4.根据ng-app名称找到相应的路由. 5.加载默认地址. 6.Js顺序执行,加载相应模版页 sys_tpls/home.html 7.在此,可以看到index路由中只是填充了ui-view为sys_login的div模

Springboot &amp; Mybatis 构建restful 服务三

Springboot & Mybatis 构建restful 服务三 1 前置条件 成功执行完Springboot & Mybatis 构建restful 服务二 2 restful service 添加日志 1)新建 logback.xml文件(配置生成的日志文件的格式) src/main/resources/logback.xml <?xml version="1.0" encoding="UTF-8"?>   <!-- 设置根

AngularJS服务总结

在之前介绍AngularJS的博客中,简单的介绍了AngularJS提供的常用服务,以及如何自定义服务,具体可参见<AngularJS 服务(Service)>.在这一篇博客中,我将为大家详细介绍如何自定义服务,以及各种方式之间的区别. value(name, object) value(name, object)方法允许我们直接将一个普通值或对象作为服务.我们通过一段代码来看看如何使用: <!DOCTYPE html> <html> <head> <

angularjs 服务

内置服务 1.$timeout 2.$watch(obj,fun): fun(newVal,oldVal,scope) //newVal是新改变的值,oldVal是旧值 3.$destroy():作用域的销毁,如果子作用域不再有用了.那么子作用域的创建者就会负责用$destroy()来将它销毁.这回停止$digest再调用子作用域,并且让作用域占用的内容能够被回收. 内置函数: 1.dateFilter(time,format)//参数time是时间,format是格式化 angularjs 服

openstack-r版(rocky)搭建基于centos7.4 的openstack swift对象存储服务 三

openstack-r版(rocky)搭建基于centos7.4 的openstack swift对象存储服务 一 openstack-r版(rocky)搭建基于centos7.4 的openstack swift对象存储服务 二 openstack-r版(rocky)搭建基于centos7.4 的openstack swift对象存储服务 三 openstack-r版(rocky)搭建基于centos7.4 的openstack swift对象存储服务 四 以下操作在控制节点执行control

AngularJS学习之旅—AngularJS 服务(八)

1.AngularJS 服务(Service) AngularJS 中你可以创建自己的服务,或使用内建服务.2.什么是服务? 在 AngularJS 中,服务是一个函数或对象,可在你的 AngularJS 应用中使用. AngularJS 内建了30 多个服务. 有个 $location 服务,它可以返回当前页面的 URL 地址. 注意 $location 服务是作为一个参数传递到 controller 中.如果要使用它,需要在 controller 中定义. var app = angular

angularJS服务一

一 认识服务 1.服务这个概念其实并不陌生,在其他语言中如java便有这样的概念,其作用就是对外提供某个特定的功能,如消息服务,文件压缩服务等,是一个独立的模块.ng的服务是一个单例对象或函数,对外提供特定的功能. 2.特点:首先是一个单例,即无论这个服务被注入到任何地方,对象始终只有一个实例. 其次这与我们自己定义一个function然后在其他地方调用不同,因为服务被定义在一个模块中,所以其使用范围是可以被我们管理的.ng的避免全局变量污染意识非常强. 3.ng提供了很多内置的服务,如$loc

angularJS 服务--$provide里factory、service方法

服务提供了一种能在应用的整个生命周期内保持数据的方法,它能够在控制器之间进行通 信,并且能保证数据的一致性. 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 <title>2.angularjs自定义服务</title> 6 <script src="../js/angularjs.js"></scr