/**
*普通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);
});
}]); 

angularjs项目中关于服务的应用的更多相关文章

  1. 教你如何在React及Redux项目中进行服务端渲染

    服务端渲染(SSR: Server Side Rendering)在React项目中有着广泛的应用场景 基于React虚拟DOM的特性,在浏览器端和服务端我们可以实现同构(可以使用同一份代码来实现多端 ...

  2. AngularJS中实现服务端分页

    这个教程将介绍在AngularJS应用中的服务端分页处理.在任何涉及到列表或表格数据的应用中都可能会用到分页. 概念 当我们处理异步分页时,每次只从服务器上获取一页数据.也就是说当用户点击第二页,就只 ...

  3. 项目中使用WCF替换asmx Web service总结

    以前项目解决方案中,用http协议的asmx Web service作服务器数据访问入口,在SoapHeader中写入用户名和加盐密码进行身份认证. http asmx服务是明文传输,传输过程中数据很 ...

  4. node-express脚手架生成的项目中实现浏览器缓存

    前言: 最近在做基于 node-express 的个人站点 朵朵视野 ,在站点发布之后自己在访问测试的过程中发现站点是没有缓存机制的,这样就导致每次访问站点都需要重新去加载资源,很消耗资源以及用户体验 ...

  5. netcore项目中IStartupFilter使用

    背景: netcore项目中有些服务是在通过中间件来通信的,比如orleans组件.它里面服务和客户端会指定网关和端口,我们只需要开放客户端给外界,服务端关闭端口.相当于去掉host,这样省掉了些指定 ...

  6. [渣翻译] 在ASP.NET MVC WebAPI项目中使用 AngularJS

    原文地址http://blog.technovert.com/2013/12/setting-up-angularjs-for-asp-net-mvc-n-webapi-project/ 我们最近发布 ...

  7. 【新手总结】在.Net项目中使用Redis作为缓存服务

    最近由于项目需要,在系统缓存服务部分上了redis,终于有机会在实际开发中玩一下,之前都是自己随便看看写写,很零碎也没沉淀下来什么,这次算是一个系统学习和实践过程的总结. 和Redis有关的基础知识 ...

  8. 怎么理解angularjs中的服务?

    AngularJS中的服务其实就是提供一种方式抽取共用类库 比如说一些工具类方法,我们传统的做法就是自己写个 utility 类,把相关的工具方法填充到utility里面去,最后把utility类放到 ...

  9. 如何在Crystal框架项目中内置启动MetaQ服务?

    当Crystal框架项目中需要使用消息机制,而项目规模不大.性能要求不高时,可内置启动MetaQ服务器. 分步指南 项目引入crystal-extend-metaq模块,如下: <depende ...

随机推荐

  1. 基于 Webpack & Vue & Vue-Router 的 SPA 初体验

    基于 Webpack & Vue & Vue-Router 的 SPA 初体验 本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com ...

  2. STM32自带的bool型变量

    这些标着位会让你的程序使用起来更方便. First you need to include "STM32f10x_type.h" /*布尔型变量*/typedef enum{FAL ...

  3. BZOJ 1006 神奇的国度

    Description K国是一个热衷三角形的国度,连人的交往也只喜欢三角原则.他们认为三角关系:即AB相互认识,BC相互认识,CA相互认识,是简洁高效的.为了巩固三角关系,K国禁止四边关系,五边关系 ...

  4. 【POJ】3283 Card Hands

    字典树. #include <iostream> #include <cstdio> #include <cstring> #include <string& ...

  5. 【HDOJ】2364 Escape

    bfs.题目做的不细心,好多小错误.尤其注意起始点就是边界的情况.wa了八次. #include <iostream> #include <cstdio> #include & ...

  6. Unity GUI编程

    脚本语言:C# 附上一张图说明Unity GUI编程中可用的控件:(可能有遗漏) 下面列出一些例子来说明: 1.Groups : 在固定Layout模式中起到组织可用项的功能,它让你在屏幕的一个区域中 ...

  7. 动态规划(斜率优化):BZOJ 1010 【HNOI2008】 玩具装箱

    玩具装箱toy Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 8218  Solved: 3233[Submit] Description P 教授要去 ...

  8. git 七图七模式 -- 工作流

    git 是现在最流行的代码合作工作方式,本文通过七张图来描述一下当下最流行的 git 工作模式 集中式工作流 集中式工作流 功能分支工作流 Gitflow工作流 Forking 工作流 Pull Re ...

  9. C - Catch That Cow

    题目大意 农民约翰需要抓住他的牛,他和他的牛在一条直线上(估计是一维生物),约翰在NN; ; ; i<; i++)        {            )                q- ...

  10. awr报告

    BEGIN DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT();END;/ exec DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT ...