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 相关文章推荐
IE和Firefox下javascript的兼容写法小结
Dec 10 Javascript
一个简单的实现下拉框多选的插件可移植性比较好
May 05 Javascript
javascript 自定义回调函数示例代码
Sep 26 Javascript
纯javascript模仿微信打飞机小游戏
Aug 20 Javascript
JavaScript中push(),join() 函数 实例详解
Sep 06 Javascript
javascript特殊文本输入框网页特效
Sep 13 Javascript
NPM 安装cordova时警告:npm WARN deprecated minimatch@2.0.10: Please update to minimatch 3.0.2 or higher to
Dec 20 Javascript
javascript 面向对象function详解及实例代码
Feb 28 Javascript
详解vue添加删除元素的方法
Jun 30 Javascript
详解vue axios用post提交的数据格式
Aug 07 Javascript
JS通过识别id、value值对checkbox设置选中状态
Feb 19 Javascript
全面解析Vue中的$nextTick
Dec 24 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 在线打包_支持子目录
2008/06/28 PHP
PHP 文件缓存的性能测试
2010/04/25 PHP
php.ini中date.timezone设置分析
2011/07/29 PHP
php提取身份证号码中的生日日期以及验证是否为成年人的函数
2015/09/29 PHP
PHP实现导出带样式的Excel
2016/08/28 PHP
在JavaScript中遭遇级联表达式陷阱
2007/03/08 Javascript
jquery.combobox中文api和例子,修复了上面的小bug
2011/03/28 Javascript
基于jquery的button默认enter事件(回车事件)。
2011/05/18 Javascript
关于JS管理作用域的问题
2013/04/10 Javascript
JavaScript的setAttribute兼容性问题解决方法
2013/11/11 Javascript
jQuery中的jQuery()方法用法分析
2014/12/27 Javascript
jquery+CSS实现的多级竖向展开树形TRee菜单效果
2015/08/24 Javascript
浅析JS运动
2015/12/28 Javascript
BootStrap Progressbar 实现大文件上传的进度条的实例代码
2016/06/27 Javascript
bootstrap datetimepicker2.3.11时间插件使用
2016/11/19 Javascript
Vue学习笔记进阶篇之函数化组件解析
2017/07/21 Javascript
Angular4开发解决跨域问题详解
2017/08/28 Javascript
bootstrap-table.js扩展分页工具栏(增加跳转到xx页)功能
2017/12/28 Javascript
解决Mac node版本升级失败的问题
2018/05/16 Javascript
Vue中使用ElementUI使用第三方图标库iconfont的示例
2018/10/11 Javascript
微信小程序indexOf的替换方法(推荐)
2020/01/14 Javascript
webpack.DefinePlugin与cross-env区别详解
2020/02/23 Javascript
通过5个知识点轻松搞定Python的作用域
2016/09/09 Python
Python查找数组中数值和下标相等的元素示例【二分查找】
2019/02/13 Python
实例详解python函数的对象、函数嵌套、名称空间和作用域
2019/05/31 Python
基于python计算并显示日间、星期客流高峰
2020/05/07 Python
python实现计算器简易版
2020/12/17 Python
如何让IE9以下版本(ie6/7/8)认识html5元素
2013/04/01 HTML / CSS
继电保护工岗位职责
2014/01/05 职场文书
后进生转化工作制度
2014/01/17 职场文书
六一儿童节活动总结
2014/08/27 职场文书
干部竞争上岗演讲稿
2014/09/11 职场文书
如何书写授权委托书?
2019/06/25 职场文书
vue-cil之axios的二次封装与proxy反向代理使用说明
2022/04/07 Vue.js
什么是Python装饰器?如何定义和使用?
2022/04/11 Python
Python实战实现爬取天气数据并完成可视化分析详解
2022/06/16 Python