你的位置:首页 > Java教程

[Java教程]angularjs项目中关于服务的应用


/**
*普通ajax请求公共服务
*/
mainModule.factory('myService',function($http,$q){
var service = {};
var baseUrl = '../';
var _url = '';
var _finalUrl = '';
var _token = '';

/**
* 处理请求路径
*/
var makeUrl = function(){
_url = _url.split(' ').join('+');
_finalUrl = baseUrl +_url;
return _finalUrl
}

/**
* 设置请求路径
*/
service.setUrl = function(url){
_url = url;
}

service.setToken = function(token){
_token = token;
}

/**
* 获取请求路径
*/
service.getUrl = function(){
return _url;
}

service.getToken = function(){
return _token;
}

/**
* $q.defer() 构建的 deffered 实例的几个方法的作用。
* 如果异步操作成功,则用resolve方法将Promise对象的状态变为“成功”(即从pending变为resolved);如果异步操作失败,
* 则用reject方法将状态变为“失败”(即从pending变为rejected)。最后返回 deferred.promise ,我们就可以链式调用then方法。
*/
service.callItuns = function(){
makeUrl();
//通过 调用 $q.defferd 返回deffered对象以链式调用
/**
* deffered 对象的方法
* 1.resolve(value):在声明resolve()处,表明promise对象由pending状态转变为resolve。 成功状态
* 2.reject(reason):在声明resolve()处,表明promise对象由pending状态转变为rejected。失败状态
* 3.notify(value) :在声明notify()处,表明promise对象unfulfilled状态,在resolve或reject之前可以被多次调用。
*/
var defrred = $q.defer();
$http({
method: 'post', url: _finalUrl,headers : {'token' : _token}
}).success(function(resp){
if(resp.success){
defrred.resolve(resp);
}
})
/**
* 返回promise对象
* 1.then(errorHandler, fulfilledHandler, progressHandler):
* then方法用来监听一个Promise的不同状态。errorHandler监听failed状态,
* fulfilledHandler监听fulfilled状态,progressHandler监听unfulfilled(未完成)状态。
* 此外,notify 回调可能被调用 0到多次,提供一个进度指示在解决或拒绝(resolve和rejected)之前。
* 2.catch(errorCallback) —— promise.then(null, errorCallback) 的快捷方式
* 3.finally(callback) ——让你可以观察到一个 promise 是被执行还是被拒绝, 但这样做不用修改最后的 value值。
* 这可以用来做一些释放资源或者清理无用对象的工作,不管promise 被拒绝还是解决。 更多的信息请参阅 完整文档规范.
*/
return defrred.promise;
}

return service;
});

 

/*在控制器中应用该服务*/

 /**
 *某个js文件
 */
mainModule.controller('togetherCtrl', ['$scope','$http','$timeout','$state','myService',
  function($scope,$http,$timeout,$state,myService){
//设置请求路径
var _url = 'kcsz/getCourseList.do'
//set方法设置路径
myService.setUrl(_url);
//call请求回调
/**
 * 因为callItunes返回一个promise对象,一旦我们的promise满足了
 * 我们可以调用.then()方法以及设置$scope.data.artistData。
 * 会注意到我们的controller是非常的“瘦”。因为我们所有的逻辑和持久化数据都存放在了service中而不是controller中。
 */
myService.callItuns().then(function(data){
 $scope.courserList = data.data;
 console.log(data);
});
}]);