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 相关文章推荐
基于prototype的validation.js发布2.3.4新版本,让你彻底脱离表单验证的烦恼
Dec 06 Javascript
javascript 操作Word和Excel的实现代码
Oct 26 Javascript
editable.js 基于jquery的表格的编辑插件
Oct 24 Javascript
杨氏矩阵查找的JS代码
Mar 21 Javascript
js实现显示当前状态的导航效果代码
Aug 28 Javascript
jQuery插件之validation插件
Mar 29 jQuery
vue使用axios跨域请求数据问题详解
Oct 18 Javascript
js 图片转base64的方式(两种)
Apr 24 Javascript
详解Vue.js中.native修饰符
Apr 24 Javascript
Bootstrap开发中Tab标签页切换图表显示问题的解决方法
Jul 13 Javascript
Vue中使用clipboard实现复制功能
Sep 05 Javascript
微信小程序利用button控制条件标签的变量问题
Mar 15 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
CodeIgniter错误mysql_connect(): No such file or directory解决方法
2014/09/06 PHP
WordPress自定义时间显示格式
2015/03/27 PHP
laravel5.2实现区分前后台用户登录的方法
2017/01/11 PHP
laravel5.4生成验证码的实例讲解
2017/08/05 PHP
Javascript调用XML制作连动下拉列表框
2006/06/25 Javascript
range 标准化之获取
2011/08/28 Javascript
javascript 实现键盘上下左右功能的小例子
2013/09/15 Javascript
浅谈Javascript 数组与字典
2015/01/29 Javascript
多个jQuery版本共存的处理方案
2015/03/17 Javascript
AngularJS directive返回对象属性详解
2016/03/28 Javascript
js利用clipboardData实现截屏粘贴功能
2016/10/12 Javascript
浅谈JS函数定义方式的区别
2016/10/30 Javascript
利用jQuery实现一个简单的表格上下翻页效果
2017/03/14 Javascript
JS获取日期的方法实例【昨天,今天,明天,前n天,后n天的日期】
2017/09/28 Javascript
JS声明对象时属性名加引号与不加引号的问题及解决方法
2018/02/16 Javascript
ES6下子组件调用父组件的方法(推荐)
2018/02/23 Javascript
React实现全局组件的Toast轻提示效果
2018/09/21 Javascript
JS使用队列对数组排列,基数排序算法示例
2019/03/02 Javascript
详解vue-property-decorator使用手册
2019/07/29 Javascript
详解Python 函数如何重载?
2019/04/23 Python
Mac 使用python3的matplot画图不显示的解决
2019/11/23 Python
python中的selenium安装的步骤(浏览器自动化测试框架)
2020/03/17 Python
在python中使用nohup命令说明
2020/04/16 Python
python + selenium 刷B站播放量的实例代码
2020/06/12 Python
使用ITK-SNAP进行抠图操作并保存mask的实例
2020/07/01 Python
Java面试题:请说出如下代码的输出结果
2013/04/22 面试题
专科毕业生求职简历的自我评价
2013/10/12 职场文书
记帐员岗位责任制
2014/02/08 职场文书
委托书样本
2014/04/02 职场文书
项目合作协议书
2014/04/16 职场文书
品德评语大全
2014/05/05 职场文书
“九一八事变纪念日”国旗下讲话稿
2014/09/14 职场文书
2015年乡镇财政工作总结
2015/05/19 职场文书
简爱电影观后感
2015/06/10 职场文书
Python Django / Flask如何使用Elasticsearch
2022/04/19 Python
vue 自定义组件添加原生事件
2022/04/21 Vue.js