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 模拟气泡屏保效果代码
Jul 10 Javascript
JavaScript 计算图片加载数量的代码
Jan 01 Javascript
Extjs中TabPane如何嵌套在其他网页中实现思路及代码
Jan 27 Javascript
jquery实现metro效果示例代码
Sep 06 Javascript
jQuery实现类似滑动门切换效果的层切换
Sep 23 Javascript
jQuery学习之prop和attr的区别示例介绍
Nov 15 Javascript
JSON格式的键盘编码对照表
Jan 29 Javascript
详解angular2封装material2对话框组件
Mar 03 Javascript
Angular中$broadcast和$emit的使用方法详解
May 22 Javascript
Angular4绑定html内容出现警告的处理方法
Nov 03 Javascript
详解创建自定义的Angular Schematics
Jun 06 Javascript
微信小程序实现侧边栏分类
Oct 21 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
PHP 简单日历实现代码
2009/10/28 PHP
php ckeditor上传图片文件名乱码解决方法
2013/11/15 PHP
php生成短网址示例
2014/05/05 PHP
PHP远程采集图片详细教程
2014/07/01 PHP
PHP基于Closure类创建匿名函数的方法详解
2017/08/17 PHP
Thinkphp5框架实现获取数据库数据到视图的方法
2019/08/14 PHP
Yii框架多语言站点配置方法分析【中文/英文切换站点】
2020/04/07 PHP
跨浏览器的设置innerHTML方法
2006/09/18 Javascript
js 操作select相关方法函数
2009/12/06 Javascript
纯javaScript、jQuery实现个性化图片轮播【推荐】
2017/01/08 Javascript
基于webpack 实用配置方法总结
2017/09/28 Javascript
nuxt框架中路由鉴权之Koa和Session的用法
2018/05/09 Javascript
vue在自定义组件中使用v-model进行数据绑定的方法
2019/03/25 Javascript
解决vue cli使用typescript后打包巨慢的问题
2019/09/30 Javascript
在vue中使用防抖和节流,防止重复点击或重复上拉加载实例
2019/11/13 Javascript
JS Array.from()将伪数组转换成数组的方法示例
2020/03/23 Javascript
Vue axios获取token临时令牌封装案例
2020/09/11 Javascript
Vue父子组件传值的一些坑
2020/09/16 Javascript
微信小程序实现底部弹出模态框
2020/11/18 Javascript
详解vue 组件注册
2020/11/20 Vue.js
python调用百度语音识别api
2018/08/30 Python
Django开发的简易留言板案例详解
2018/12/04 Python
如何实现Django Rest framework版本控制
2019/07/25 Python
python递归函数求n的阶乘,优缺点及递归次数设置方式
2020/04/02 Python
CSS3制作Dropdown下拉菜单的方法
2015/07/18 HTML / CSS
天猫精选:上天猫,就够了
2016/09/21 全球购物
Clarisonic美国官网:科莱丽声波洁面仪
2017/10/12 全球购物
Wiggle美国:英国骑行、跑步、游泳、铁人三项商店
2018/10/27 全球购物
户外亲子活动总结
2015/05/08 职场文书
建议书的格式及范文
2015/09/14 职场文书
投资入股协议书
2016/03/22 职场文书
2016年综治和平安建设宣传月活动总结
2016/04/01 职场文书
2019年亲子运动会口号
2019/10/11 职场文书
MySQL索引篇之千万级数据实战测试
2021/04/05 MySQL
ORACLE数据库应用开发的三十个注意事项
2021/06/07 Oracle
python的变量和简单数字类型详解
2021/09/15 Python