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 相关文章推荐
改进版通过Json对象实现深复制的方法
Oct 24 Javascript
js+html5实现可在手机上玩的拼图游戏
Jul 17 Javascript
jQuery EasyUI常用数据验证汇总
Sep 18 Javascript
js实现文本上下来回滚动
Feb 03 Javascript
Angularjs 实现移动端在线测评效果(推荐)
Apr 05 Javascript
详解AngularJS1.6版本中ui-router路由中/#!/的解决方法
May 22 Javascript
bootstrap选项卡扩展功能详解
Jun 14 Javascript
js实现多张图片延迟加载效果
Jul 17 Javascript
JavaScript学习笔记之函数记忆
Sep 06 Javascript
vue内置组件transition简单原理图文详解(小结)
Jul 12 Javascript
Vue项目总结之webpack常规打包优化方案
Jun 06 Javascript
javascrpt密码强度校验函数详解
Mar 18 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
Oracle 常见问题解答
2006/10/09 PHP
UTF8编码内的繁简转换的PHP类
2009/07/09 PHP
php数组的一些常见操作汇总
2011/07/17 PHP
php获取网页标题和内容函数(不包含html标签)
2014/02/03 PHP
php获取百度收录、百度热词及百度快照的方法
2015/04/02 PHP
js中substring和substr的详细介绍与用法
2013/08/29 Javascript
DOM节点深度克隆函数cloneNode()用法实例
2015/01/12 Javascript
IE下使用jQuery重置iframe地址时内存泄露问题解决办法
2015/02/05 Javascript
JavaScript中字符串(string)转json的2种方法
2015/06/25 Javascript
Bootstrap每天必学之按钮(一)
2015/11/24 Javascript
jquery弹出遮掩层效果【附实例代码】
2016/04/28 Javascript
JS上传图片预览插件制作(兼容到IE6)
2016/08/07 Javascript
BOM系列第一篇之定时器setTimeout和setInterval
2016/08/17 Javascript
vue.js的提示组件
2017/03/02 Javascript
基于JavaScript实现的折半查找算法示例
2017/04/14 Javascript
vue-router实现webApp切换页面动画效果代码
2017/05/25 Javascript
vue router路由嵌套不显示问题的解决方法
2017/06/17 Javascript
js实现从左向右滑动式轮播图效果
2017/07/07 Javascript
Vue中this.$router.push参数获取方法
2018/02/27 Javascript
使用Jenkins部署React项目的方法步骤
2019/03/11 Javascript
WebGL学习教程之Three.js学习笔记(第一篇)
2019/04/25 Javascript
vue 二维码长按保存和复制内容操作
2020/09/22 Javascript
利用django如何解析用户上传的excel文件
2017/07/24 Python
python 中字典嵌套列表的方法
2018/07/03 Python
Win8下python3.5.1安装教程
2020/07/29 Python
django-orm F对象的使用 按照两个字段的和,乘积排序实例
2020/05/18 Python
selenium+python自动化78-autoit参数化与批量上传功能的实现
2021/03/04 Python
同步和异步有何异同,在什么情况下分别使用他们?举例说明
2014/02/27 面试题
计算机专业优秀大学生自我总结
2014/01/21 职场文书
税务会计岗位职责
2014/02/18 职场文书
副总经理岗位职责
2014/03/16 职场文书
实习评语大全
2014/04/26 职场文书
第一节英语课开场白
2015/06/01 职场文书
幼儿教师三分钟演讲稿
2019/06/21 职场文书
MySQL主从复制断开的常用修复方法
2021/04/07 MySQL
Redis分布式锁的7种实现
2022/04/01 Redis