AngularJS服务

于运AngularJS的路由管理暨控制视图加载的早晚,当新的视图加载进来,原有视图的控制器会叫灭绝,这是由于内存占用和性的设想。服务提供了一致栽能够当采用的全体生命周期内维持同共享数据的办法,它能在控制器之间开展通信,并且保持数据的一致性。

劳务是一个单例对象,在每个应用中唯有会叫实例化一赖,并且是缓加载的,服务提供了拿与一定功能相关联的法子集中在一道的接口。就以常因此的$http服务也例,它提供了针对性浏览器的XMLHttpRequest对象的底部访问功能,我们得透过$http的API与XMLHttpRequest进行互,而休欲盖调用这些底层代码而污染使。

angular.module(“myApp”, [])

.factory(“userService”, function($http) {

var current_user;

return {

getCurrentUser: function() {

return current_user;

},

setCurrentUser: function(user) {

current_user = user;

}

};

}); //示例服务,在行使之方方面面生命周期内保存current_user

否自己之运用创建服务是非常容易的,只待报之服务就是足以。服务让注册后,AngularJS编译器就好引用它,并且在运转时将其看做依赖加载进来。服务号的注册表使得在测试着伪造和去相互隔离的利用变得非常容易。

挂号一个服务

为此$injector来创造同报服务产生某些种植方式

用angular.module的factory API创建服务,是极度广大也是不过巧的法:

angular.module(“myApp.services”, [])

.factory(“serviceName”, function() {

var serviceInstance = {};

return serviceInstance; });

这儿,serviceName已经注册改成这AngularJS应用的一个劳务了。

劳之厂函数用来特别成一个单例的目标要函数,这个目标或函数就是劳动,它见面满怀在于利用之整整生命周期内。同创建控制器的章程同样,服务之厂子函数既可是一个函数也得是一个数组:

angular.module(“myApp.service”, [])

.factory(“serviceName”, [function($http) {} ]);

使用服务

足在控制器、指令、过滤器或另外一个服务遭遇经依赖声明的办法来用服务。AngularJS会像平常一模一样当运行期自动处理实例化和依赖性加载的连带事情。将劳动的名作参数传递给控制器函数,可以用劳动注入到控制器中。当服务变成有控制器的依,就得于控制器中调用任何概念在斯服务目标及之方法。

myApp.controller(“ServiceController”, function($scope, $timeout,
serviceName) {} );

比如面这样以由定义服务前注入有的AngularJS内置服务,这是约定俗成的条条框框。

为了以控制器之间共享数据,需要以劳动受到补充加一个据此来存储用户名之措施。记住,服务在利用之生命周期内是单例模式的,因此好将用户称安全的储存在里。

AngularJS应用中,factory()方法是因此来注册服务之太健康方法,另外还有一对API可以以特殊之情形下帮助我们减代码量。

factory()

service()

constant()

value()

provider()

假若指望以config()函数中得对服务开展配备,必须用provider()来定义服务。

tips:
单例模式是均等栽常用之软件设计模式,在它的中心结构中单含一个叫作单例类的不同寻常类。通过单例模式可保证系统中一个近似就生一个实例而且该实例易于外界看,从而有利于对实例个数的操纵并节约系统资源。如果欲于系面临有类的靶子只能是一个,单例模式是太好之化解方案。

本文内容出自《AngularJS权威教程》一书。

相关文章