/**
*普通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. sql 学习之 group by 及 聚合函数

    1.在使用 GROUP BY 子句时,Select列表中的所有列必须是聚合列(SUM,MIN/MAX,AVG等)或是GROUP BY 子句中包括的列.同样,如果在SELECT 列表中使用聚合列,SEL ...

  2. BZOJ 1070 修车

    Description 同一时刻有\(N\)位车主带着他们的爱车来到了汽车维修中心.维修中心共有\(M\)位技术人员,不同的技术人员对不同的车进行维修所用的时间是不同的.现在需要安排这\(M\)位技术 ...

  3. 关于如何在BCB中使用CodeGuard

    作者:深圳虫 来自:深圳虫网本文来自http://www.szbug.com/disparticle.aspID=4 一. 为什么写这篇东西自己在使用BCB5写一些程序时需要检查很多东西,例如内存泄漏 ...

  4. AOP举例子

    切面类TestAspect package com.spring.aop; /** * 切面 * */ public class TestAspect { public void doAfter(Jo ...

  5. index rang scan

    根:分支的范围,范围块的地址 ----- begin tree dump branch: 0x1000c93 16780435 (0: nrow: 5, level: 1)    leaf: 0x10 ...

  6. CH Round #52 - Thinking Bear #1 (NOIP模拟赛)

    A.拆地毯 题目:http://www.contesthunter.org/contest/CH%20Round%20%2352%20-%20Thinking%20Bear%20%231%20(NOI ...

  7. Android 金融项目整理

    本来是安安心心周末休假的时间,却被强征来加班.魔都今天雾霾严重,窗外都看不到360无死角都能看到的东方明珠.吃完午饭后睡一觉起来,觉得该给自己做点事情了.那就把项目里面的一些可圈可点的技术都罗列出来, ...

  8. 使用StaticResource给控件定义公共的样式和属性来写界面XAML

    一:效果图 二:定义公共的样式和属性 在MainPage.xaml中 <phone:PhoneApplicationPage.Resources> <SolidColorBrush ...

  9. IIS6.0服务器搭建网站无法访问解决方法

    IIS6.0服务器搭建网站无法访问解决方法     IIS6.0服务器搭建网站无法访问解决方法很多朋友在用IIS6架网站的时候遇到不少问题,而这些问题有些在过去的IIS5里面就遇到过,有些是新出来的, ...

  10. [JAVA关键字] synchronized

    synchronized, Example: public synchronized void XXX() {} 参考 http://wenku.baidu.com/link?url=ecb1Zivf ...