若是眼睛不喜欢,心也会拒绝。
现在我们就以我们的home页面为例, 说一下使用面向对象的方式如何开发微信小程序;
文件目录结构
1 2 3 4 5 6 7
| - pages -- home --- home-model.js --- home.js --- home.wxml --- home.wxss --- home.json
|
我们新建一个model类, 用来处理一些复杂的逻辑, 以使我们的代码变得整洁;
home-model.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| class Home {
constructor(){ } getBannerData(id){ wx.request({ url: 'http://tp5.me/api/v1/banner/'+id, method: 'GET', success: function(res){ console.log(res); return res; } }) } }
export {Home}
|
home.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| import { Home } from 'home-model.js';
var home = new Home();
Page({
data: {
},
onLoad: function () { console.log('home on load'); this._loadData(); },
_loadData: function () { var id = 1; var data = home.getBannerData(id) return data; }
})
|
接收异步返回值
因为API返回的数据是异步的, 所以我们无法通过调用直接拿到返回值, 但是我们可以通过设置一个回调函数拿到他的返回值
home.js
1 2 3 4 5 6 7 8 9 10
| _loadData: function () { var id = 1; home.getBannerData(id, this.callback); },
callback: function(res){ console.log('回调返回'); console.log(res) }
|
home-model.js
1 2 3 4 5 6 7 8 9
| getBannerData(id, callback){ wx.request({ url: 'http://tp5.me/api/v1/banner/'+id, method: 'GET', success: function(res){ callback(res); } }) }
|
构造基类
目录结构
1 2 3 4 5 6 7 8
| - pages - utils -- base.js -- util.js -- config.js - app.js - app.json - app.wxss
|
构造配置类
config.js
1 2 3 4 5 6 7 8 9
| class Config { constructor(){
} }
Config.restUrl = 'http://tp5.me/api/v1/';
export {Config};
|
构造基类
base.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| import { Config } from '../utils/config.js';
class Base { constructor(){ this.baseRequestUrl = Config.restUrl; }
request(params){ var url = this.baseRequestUrl + params.url;
if (!params.type) { params.type = 'GET'; } wx.request({ url: url, data: params.type, header: { 'content-type': 'application/json', 'token': wx.getStorageInfoSync('token') }, method: params.type, success: function(res) { params.callback && params.callback(res.data); }, fail: function(error) { console.log(error); }, complete: function(res) { }, }) } }
export {Base};
|
类的继承
home-model.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| import { Base } from '../../utils/base.js'
class Home extends Base {
constructor(){ super(); }
getBannerData(id, callback){
var params = { url: 'banner/'+id, callback:function(res){ callback && callback(res.items) } }; this.request(params); } }
export {Home}
|