AngularJS转换响应内容


Posted in Javascript onJanuary 27, 2016

从远程API获取到的响应内容,通常是json格式的,有时候需要对获取到的内容进行转换,比如去除某些不需要的字段,给字段取别名,等等。

本篇就来体验在AngualrJS中如何实现。

在主页面,还是从controller中拿数据。

<body ng-app="publicapi">
<ul ng-controller="controllers.View">
<li ng-repeat="repo in repos">
<b ng-bind="repo.userName"></b>
<span ng-bind="repo.url"></span>
</li>
</ul>
</body>

以上,userName, url字段是从源数据中转换而来的,可能userName对应源数据中的fullName,可能源数据中有更多的字段。

在AngularJS中,把module之间的关系梳理清楚是一种很好的习惯,比如按如下方式梳理:

angular.module('publicapi.controllers',[]);
angular.module('publicapi.services',[]);
angular.module('publicapi.transformers',[]);
angular.module('publicapi',[
'publicapi.controllers',
'publicapi.services',
'publicapi.transformers'
])

数据还是从controller中来:

angular.module('publicapi.controllers')
.controller('controllers.View',['$scope', 'service.Api', function($scope, api){
$scope.repos = api.getUserRepos("");
}]);

controller依赖于service.Api这个服务。

angular.module('publicapi.services').factory('services.Api',['$q', '$http', 'services.transformer.ApiResponse', function($q, $http, apiResponseTransformer){
return {
getUserRepos: function(login){
var deferred = $q.defer();
$http({
method: "GET",
url: "" + login + "/repos",
transformResponse: apiResponseTransformer
})
.success(function(data){
deferred.resolve(data);
})
return deferred.promise;
}
};
}])

而$http服务中的transformResponse字段就是用来转换数据源的。services.Api依赖于services.transformer.ApiResponse这个服务,在这个服务力完成对数据源的转换。

angular.module('publicapi.transformers').factory('services.transformer.ApiResponse', function(){
return function(data){
data = JSON.parse(data);
if(data.length){
data = _.map(data, function(repo){
return {userName: reop.full_name, url: git_url};
})
}
return data;
};
});

以上,使用了underscore对数据源进行map转换。

Javascript 相关文章推荐
JavaScript EasyPager 分页函数
May 25 Javascript
让浏览器DOM元素最后加载的js方法
Jul 29 Javascript
node.js中的buffer.toJSON方法使用说明
Dec 14 Javascript
js控制输入框获得和失去焦点时状态显示的方法
Jan 30 Javascript
jQuery+css实现非常漂亮的水平导航菜单效果
Jul 27 Javascript
整理关于Bootstrap排版的慕课笔记
Mar 29 Javascript
AngularJS入门教程一:路由用法初探
May 27 Javascript
Javascript快速实现浏览器系统通知
Aug 26 Javascript
关于jQuery里prev()的简单操作代码
Oct 27 jQuery
Node.js调用fs.renameSync报错(Error: EXDEV, cross-device link not permitted)
Dec 27 Javascript
jQuery提示框插件SweetAlert用法分析
Aug 05 jQuery
vue 在单页面应用里使用二级套嵌路由
Dec 19 Vue.js
jQuery+css实现的切换图片功能代码
Jan 27 #Javascript
javascript中的3种继承实现方法
Jan 27 #Javascript
jQuery+css实现的换页标签栏效果
Jan 27 #Javascript
js实现的彩色方块飞舞奇幻效果
Jan 27 #Javascript
JavaScript下的时间格式处理函数Date.prototype.format
Jan 27 #Javascript
基于JavaScript实现瀑布流效果(循环渐近)
Jan 27 #Javascript
jQuery Easyui学习之datagrid 动态添加、移除editor
Jan 27 #Javascript
You might like
codeigniter自带数据库类使用方法说明
2014/03/25 PHP
php合并数组中相同元素的方法
2014/11/13 PHP
PHP合并discuz用户脚本的方法
2015/08/04 PHP
ThinkPHP3.2.1图片验证码实现方法
2016/08/19 PHP
javascript模拟的Ping效果代码 (Web Ping)
2011/03/13 Javascript
JS trim去空格的最佳实践
2011/10/30 Javascript
jQuery实现行文字链接提示效果的方法
2015/03/10 Javascript
基于jQuery实现放大镜特效
2020/10/19 Javascript
JavaScript实现瀑布流布局
2020/06/28 Javascript
初识angular框架后的所思所想
2016/02/19 Javascript
详解nodejs 文本操作模块-fs模块(五)
2016/12/23 NodeJs
Vue异步组件使用详解
2017/04/08 Javascript
JavaScript对象_动力节点Java学院整理
2017/06/23 Javascript
使用html+js+css 实现页面轮播图效果(实例讲解)
2017/09/21 Javascript
JavaScript数据结构之双向链表定义与使用方法示例
2017/10/27 Javascript
js array数组对象操作方法汇总
2019/03/18 Javascript
[02:36]DOTA2亚洲邀请赛小组赛精彩集锦:EE凭借法力虚空拿下4杀
2017/03/30 DOTA
[01:30:15]DOTA2-DPC中国联赛 正赛 Ehome vs Aster BO3 第二场 2月2日
2021/03/11 DOTA
使用PYTHON接收多播数据的代码
2012/03/01 Python
Python中列表的一些基本操作知识汇总
2015/05/20 Python
在Python的列表中利用remove()方法删除元素的教程
2015/05/21 Python
python脚本实现xls(xlsx)转成csv
2016/04/10 Python
python实现微信接口(itchat)详细介绍
2017/10/23 Python
Python实现的三层BP神经网络算法示例
2018/02/07 Python
Python3.5装饰器原理及应用实例详解
2019/04/30 Python
基于Python解密仿射密码
2019/10/21 Python
Python变量作用域LEGB用法解析
2020/02/04 Python
基于canvas使用贝塞尔曲线平滑拟合折线段的方法
2018/01/10 HTML / CSS
台湾母婴用品限时团购:妈咪爱
2018/08/03 全球购物
Nice Kicks网上商店:ShopNiceKicks.com
2018/12/25 全球购物
阿联酋优惠券服务:Living Kool
2019/12/12 全球购物
双立人加拿大官网:Zwilling加拿大
2020/08/10 全球购物
解释下列WebService名词:WSDL、SOAP、UDDI
2012/06/22 面试题
致百米运动员广播稿
2014/01/29 职场文书
我的大学生活演讲稿
2014/04/25 职场文书
总经理任命书范本
2014/06/05 职场文书