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 相关文章推荐
JS按字节截取字符长度实例
Nov 20 Javascript
js封装可使用的构造函数继承用法分析
Jan 28 Javascript
基于jQuery实现动态搜索显示功能
May 05 Javascript
基于CSS3和jQuery实现跟随鼠标方位的Hover特效
Jul 25 Javascript
用最简单的方法判断JavaScript中this的指向(推荐)
Sep 04 Javascript
AngularJS 打开新的标签页实现代码
Sep 07 Javascript
详解vue-cli中的ESlint配置文件eslintrc.js
Sep 25 Javascript
javascript数组拍平方法总结
Jan 20 Javascript
基于axios 解决跨域cookie丢失的问题
Sep 26 Javascript
Koa代理Http请求的示例代码
Oct 10 Javascript
微信小程序webview实现长按点击识别二维码功能示例
Jan 24 Javascript
如何管理Vue中的缓存页面
Feb 06 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
PHP中spl_autoload_register()和__autoload()区别分析
2014/05/10 PHP
php使用gettimeofday函数返回当前时间并存放在关联数组里
2015/03/19 PHP
PHP防盗链的基本思想 防盗链的设置方法
2015/09/25 PHP
php无法连接mysql数据库的正确解决方法
2016/07/01 PHP
php简单实现多维数组排序的方法
2016/09/30 PHP
PHP与jquery实时显示网站在线人数实例详解
2016/12/02 PHP
详解PHP swoole process的使用方法
2017/08/26 PHP
php将字符串转换为数组实例讲解
2020/05/05 PHP
Safari5中alert的无限循环BUG
2011/04/07 Javascript
JavaScript 原型继承之构造函数继承
2011/08/26 Javascript
javascript简易缓动插件(源码打包)
2012/02/16 Javascript
javascript使用switch case实现动态改变超级链接文字及地址
2014/12/16 Javascript
jQuery插件Tooltipster实现漂亮的工具提示
2015/04/12 Javascript
js入门之Function函数的使用方法【新手必看】
2016/11/22 Javascript
基于vue实现swipe轮播组件实例代码
2017/05/24 Javascript
JavaScript实现提交模式窗口后刷新父窗口数据的方法
2017/06/16 Javascript
在create-react-app中使用css modules的示例代码
2018/07/31 Javascript
taro开发微信小程序的实践
2019/05/21 Javascript
ES6基础之字符串和函数的拓展详解
2019/08/22 Javascript
Vue状态模式实现窗口停靠功能(灵动、自由, 管理后台Admin界面)
2020/03/06 Javascript
微信小程序自定义弹出层效果
2020/05/26 Javascript
[50:17]Newbee vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
python 处理dataframe中的时间字段方法
2018/04/10 Python
python实现抖音视频批量下载
2018/06/20 Python
详解python使用turtle库来画一朵花
2019/03/21 Python
Python函数和模块的使用总结
2019/05/20 Python
python元组的概念知识点
2019/11/19 Python
如何在python中判断变量的类型
2020/07/29 Python
Linux机考试题
2015/10/16 面试题
银行求职推荐信范文
2013/11/30 职场文书
银行先进个人事迹材料
2014/05/11 职场文书
青奥会口号
2014/06/12 职场文书
新闻专业毕业生求职信
2014/08/08 职场文书
2014机关党员干部“正风肃纪”思想汇报
2014/09/15 职场文书
山东省召开党的群众路线教育实践活动总结大会新闻稿
2014/10/21 职场文书
学校学习型党组织建设心得体会
2019/06/21 职场文书