/**
*普通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. WPF学习笔记-使用自定义资源字典(style)文件

    1.添加资源字典文件style.xmal 2.在资源字典中添加自定义style等 <ResourceDictionary xmlns="http://schemas.microsoft ...

  2. 关于ueditor1.4.3版复制section标签丢失class和style样式问题

    在复制微信的文章格式到ueditor时发现section标签中的style和class属性丢失,严重影响美观. 原文格式,排版清晰段落分明赏心悦目: 复制到ueditor后的格式...这跟原文是没法比 ...

  3. Node.js流

    什么是流? 流是可以从一个源读取或写入数据到连续的目标对象.在Node.js,有四种类型的数据流. Readable - 其是用于读操作. Writable - 用在写操作. Duplex - 其可以 ...

  4. UpdateLayeredWindow是炫效果的关键

    自绘——是的,输入框每个字都自己绘制,计算行宽,行高,模拟光标闪烁,处理输入法的各种事件,以及选中,拖动等功能. 支持支持一下,实际上无句柄的,就是多行富文本编辑比较麻烦,其他的,都不复杂.很容易实现 ...

  5. js中的Call与apply方法

    看到同行写得不错,直接转载了...0.0  祝大家天天开心! 例子来源http://uule.iteye.com/blog/1158829

  6. Git各种错误汇总

    1.github上版本和本地上版本冲突的方法,即提交时会提示如下错误: 解决方法,提交时采用如下代码: git push -u origin master -f 参考链接: http://blog.c ...

  7. bzoj2096

    本来也不打算写这道题的解题报告的,因为比较水直接维护两个单调队列(最大值,最小值)随便弄弄就行了但是我开始疯狂不知道为什么的RE,然后实在没办法找root要了数据测了之后……王苍,根本就没有错啊……我 ...

  8. [Poetize II]太鼓达人

    描述 Description 鼓的主要元件是M个围成一圈的传感器.每个传 感器都有开和关两种工作状态,分别用1和0表示.显然,从不同的位置出发沿顺时针方向连续检查K个传感器可以得到M个长度为K的01串 ...

  9. -_-#【jQuery插件】Spinner 数字选择器

    Spinner (jQuery UI)

  10. 数据结构(括号序列,线段树||点分治,堆):ZJOI 2007 捉迷藏

    [题目描述] Jiajia和Wind是一对恩爱的夫妻,并且他们有很多孩子.某天,Jiajia.Wind和孩子们决定在家里玩捉迷藏游戏.他们的家很大且构造很奇特,由N个屋子和N-1条双向走廊组成,这N- ...