Page 138 - AngularJS权威教程
P. 138
118 第 14 章 服务
为了在控制器之间共享数据,需要在服务中添加一个用来储存用户名的方法。记住,服务在
应用的生命周期内是单例模式的,因此可以将用户名安全地储存在其中。
angular.module('myApp.services', [])
.factory('githubService', function($http) {
var githubUrl = 'https://api.github.com',
githubUsername;
var runUserRequest = function(path) {
// 从使用JSONP的Github API的$http服务中返回promise
return $http({
method: 'JSONP',
url: githubUrl + '/users/' +
githubUsername + '/' +
path + '?callback=JSON_CALLBACK'
});
};
// 返回带有两个方法的服务对象
// 事件
// 和setUsername
return {
events: function() {
return runUserRequest('events');
},
setUsername: function(username) {
githubUsername = username;
}
};
});
现在,服务中有一个setUsername方法,用来保存当前的GitHub用户名了。
githubService可以注入到应用的任何一个控制器中,并可以在控制器中调用events()方
法,且无须担心当前作用域对象上的用户名是否是正确的。
angular.module('myApp', ['myApp.services'])
.controller('ServiceController',
function($scope, githubService) {
$scope.setUsername =
githubService.setUsername;
});
14.3 创建服务时的设置项
在AngularJS应用中,factory()方法是用来注册服务的最常规方式,同时还有其他一些API
可以在特定情况下帮助我们减少代码量。
共有5种方法用来创建服务:
factory()
service()
constant()
value()
provider()