用Mock.js + AngularJS来提高开发效率
在团队协作中,前端开发与后端开发是并行的.如果需要调用接口,但接口却没开发完成,怎么办?今天教大家如何使用Mock.js来构造模拟数据.
什么是Mock.js
来自nuysoft开发的一款模拟数据生成器. 详细介绍请移步官网 Mock.js Mock.js提供了非常灵活强大的构造模拟数据的函数,举个例子:
var data = Mock.mock({
'list|1-10': [{
'id|+1': 1
}]
});
console.log(data);
//{"list":[{"id":1},{"id":2},{"id":3},{"id":4},{"id":5},{"id":6}]}
接下来就解决如何在接口请求中返回模拟数据: Mock.js提供了拦截Ajax请求的方法.但内置只支持JQuery,Zepto和KISSY. 看了一下Mock.js的实现方法,jq中内置了ajaxPrefilter,轻松解决. Zepto和KISSY的实现比较粗暴,直接覆盖了原生方法… 那么Mock.js在Angular中又是如何实现…
AngularJS
AngularJS提供了非常灵活的Interceptors,可以ajax请求前和请求完成后对数据进行修改.
这里使用think2011的 mock-angular 提供了Mock.js兼容AngularJS的方法.
准备工作完成后,我们开始编写代码:
1.首先在index.html中引入mock.js和mock-angular.js 2.在主入口js中加入 Mock.mockjax(angular.module(‘test’)) 3.配置mock-data.js
Mock.mock('/auth/login', {
'code': 0,
'data': {
'userId': '@STRING(number, 16)',
'userName': '@CHINESENAME(2)'
}
});
这时候,我们再去请求/auth/login方法,返回的结果就是模拟的数据.
这里要注意的是,在mock-angular中,请求的URL会被写为 ?mockUrl= 如果需要还原,请在mock-angular源码中修改response方法中的返回值:
response: function(response) {
var original;
original = response.config.original;
if (original) {
response.data = original.result;
console.log(original);
//还原URL
response.config.url = response.config.url.replace('?mockUrl=','');
}
return response;
}
Last updated
Was this helpful?