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引用对象的方法
Jan 11 Javascript
JS实现很酷的水波文字特效实例
Feb 26 Javascript
arguments对象验证函数的参数是否合法
Jun 26 Javascript
javascript日期格式化方法汇总
Oct 04 Javascript
JavaScript文档碎片操作实例分析
Dec 12 Javascript
全面解析JavaScript中“&amp;&amp;”和“||”操作符(总结篇)
Jul 18 Javascript
H5用户注册表单页 注册模态框!
Sep 17 Javascript
jQuery实现web页面樱花坠落的特效
Jun 01 jQuery
vue中的过滤器实例代码详解
Jun 06 Javascript
layui table复选框禁止某几条勾选的实例
Sep 20 Javascript
深入理解 TypeScript Reflect Metadata
Dec 12 Javascript
JS继承实现方法及优缺点详解
Sep 02 Javascript
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
支持oicq头像的留言簿(二)
2006/10/09 PHP
php入门学习知识点七 PHP函数的基本应用
2011/07/14 PHP
php简单定时执行任务的实现方法
2015/02/23 PHP
php登录超时检测功能实例详解
2017/03/21 PHP
yii2局部关闭(开启)csrf的验证的实例代码
2017/07/10 PHP
将jQuery应用于login页面的问题及解决
2009/10/17 Javascript
javascript模拟select,jselect的方法实现
2012/11/08 Javascript
js和jquery对dom节点的操作(创建/追加)
2013/04/21 Javascript
JavaScript 中的日期和时间及表示标准介绍
2013/08/21 Javascript
js调用后台、后台调用前台等方法总结
2014/04/17 Javascript
JS实现密码框根据焦点的获取与失去控制文字的消失与显示效果
2015/11/26 Javascript
js获取及判断键盘按键的方法
2015/12/01 Javascript
利用纯Vue.js构建Bootstrap组件
2016/11/03 Javascript
BootStrap实现响应式布局导航栏折叠隐藏效果(在小屏幕、手机屏幕浏览时自动折叠隐藏)
2016/11/30 Javascript
一个Vue页面的内存泄露分析详解
2018/06/25 Javascript
vue.js添加一些触摸事件以及安装fastclick的实例
2018/08/28 Javascript
vue-自定义组件传值的实例讲解
2018/09/18 Javascript
JS实现网页端猜数字小游戏
2020/03/06 Javascript
[07:54]DOTA2-DPC中国联赛 正赛 iG vs VG 选手采访
2021/03/11 DOTA
python实现一次创建多级目录的方法
2015/05/15 Python
python编程之requests在网络请求中添加cookies参数方法详解
2017/10/25 Python
python http接口自动化脚本详解
2018/01/02 Python
python实现数据写入excel表格
2018/03/25 Python
python实现点对点聊天程序
2018/07/28 Python
pandas dataframe的合并实现(append, merge, concat)
2019/06/24 Python
Python Pandas数据中对时间的操作
2019/07/30 Python
解决django-xadmin列表页filter关联对象搜索问题
2019/11/15 Python
matplotlib.pyplot画图并导出保存的实例
2019/12/07 Python
python GUI库图形界面开发之PyQt5美化窗体与控件(异形窗体)实例
2020/02/25 Python
python GUI库图形界面开发之PyQt5菜单栏控件QMenuBar的详细使用方法与实例
2020/02/28 Python
给民警的表扬信
2014/01/08 职场文书
乡村文明行动实施方案
2014/03/29 职场文书
幼师自荐信范文
2015/03/06 职场文书
教您怎么制定西餐厅运营方案 ?
2019/07/05 职场文书
mysql的Buffer Pool存储及原理
2022/04/02 MySQL
springboot入门 之profile设置方式
2022/04/04 Java/Android