Page 134 - AngularJS权威教程
P. 134

114  第 14 章  服务






                      第14章

                                       服    务








                 到目前为止,我们只关心视图是如何同$scope绑定在一起,以及控制器是如何管理数据的。
             出于内存占用和性能的考虑,控制器只会在需要时被实例化,并且不再需要就会被销毁。这意味
             着每次切换路由或重新加载视图时,当前的控制器会被AngularJS清除掉。
                 服务提供了一种能在应用的整个生命周期内保持数据的方法,它能够在控制器之间进行通
             信,并且能保证数据的一致性。
                 服务是一个单例对象,在每个应用中只会被实例化一次(被$injector实例化),并且是延迟
             加载的(需要时才会被创建)。服务提供了把与特定功能相关联的方法集中在一起的接口。

                 以AngularJS的$http服务为例,它提供了对浏览器的XMLHttpRequest对象的底层访问功能,
             我们可以通过$http的API同XMLHttpRequest进行交互,而不需要因为调用这些底层代码而污染
             应用。
                 // 示例服务,在应用的整个生命周期内保存current_user
                 angular.module('myApp', [])
                 .factory('UserService', function($http) {
                     var current_user;

                     return {
                         getCurrentUser: function() {
                             return current_user;
                         },
                         setCurrentUser: function(user) {
                             current_user = user;
                         }
                     };
                 });
                 AngularJS提供了一些内置服务,在任何地方使用它们的方式都是统一的。同时,为复杂应
             用创建我们自己的服务也是非常有用的。

                 在AngularJS中创建自己的服务是非常容易的:只需要注册这个服务即可。服务被注册后,
             AngularJS编译器就可以引用它,并且在运行时把它当作依赖加载进来。服务名称的注册表使得
             在测试中伪造和剔除相互隔离的应用依赖变得非常容易。


             14.1  注册一个服务


                 用$injector来创建和注册服务有好几种方式,本章后面会介绍它们。
   129   130   131   132   133   134   135   136   137   138   139