有不少朋友刚接触小程序的时候,也许会有这么一种感觉:“我草,用数据去刷新页面,屌屌的”,也有朋友像我一样发出这样的感觉:“我草,这是向android看齐了吗?”,当然,还有人有这个感觉:“抄袭vue的,不用怀疑了”,
既然大家都有感觉vue是抄袭小程序的,那么我们今天就来说说小程序的数据驱动吧
对于vue,大家想起来的估计有三个英文字母。spa,啥是spa?spa的意思就是单页面应用,既然如此。那么小程序会不会也是一个spa?
当然,这个文档有没有说,就要大家自己去查找了,
spa的最大好处(个人绝得),就是数据的通用性,比如在util。js中放置了一个数据,然后在其他的js中也是可以读取的,那么这样下去,我们就仿佛有了一个另类的数据库,但是这个数据库存在的时候是否有点过长了?这个就不是我们担心的了
既然如此,那么微信小程序里面是否也有这个“数据库”?
当然是有的,就是“app.js”,毕竟人家是很久远,一直永流传的,所以说,我们比较多的操作实在app.js内部操作的,
当然,很多人还是喜欢在util里面写配置,可能我是个怪胎,
既然我们在app。js里面写下了通用代码,以及一些公用的方法,对于数据共用的重要性,相比大家都明白,试想下这么一种场景,当我们在app。js中获取到了用户的信息之后,我们只需要存储起来,然后我们再接着在其他的页面中获取用户信息的时候,我们不需要去重新获取,只是需要去读取我们的app。js就可以了,很是方便,
相对于“操控”与“反操控”,或者说是:“获取app。js的数值”与“让app。js去主动刷新我们的界面”。这两点视乎是并不对立的,而且我们也可以很轻易的实现第一点,但是第二点确实有点麻烦。
我也曾想过让app.js与某一个js调换下位置,但是失败了,
想想下下面这个场景:
作为一个线上应用,我们最需要的是与后台数据的事实刷新,比如,用户获取列表的操作,我们需要及时发送到后台吗,并且根据返回的数据重新去排版页面。在举个麻烦点的例子
我们都知道,一个即时通讯的程序,最喜欢的就是socket,但是小程序这边的话最麻烦的是当一个页面被销毁的时候,那么他的socekt也会看弄死,这个时候,我们需要考虑下生命进程的问题,那么我们最好的打算的话,是将socket的监听放在app,js的地方,那么我们就只是需要 考虑下心跳时间以及如何在app.js中更新页面的数据。第一个问题是不需要我们过分操心的,我们只需要在用户cd的时候做一系列操作就可以去避免这个的发生,但是第二个的话就是我们的难点了。也好在小程序提供了getCurrentPages来使我们度过这个难关,getCurrentPages返回的是当前栈的路径,以及该页面的数据,那么我们就可以实现类似下面的demo了
app.js
//app.js
App({
onLaunch: function () {
const that = this;
setTimeout(function () {
getCurrentPages()[0].showmessage();
}, 5000);
},
globalData: {
userInfo: null
}
})
a.js
// pages/a/a.js
Page({
/**
* 页面的初始数据
*/
data: {
msgdata: "尚未刷新"
},
showmessage: function () {
this.setData({ msgdata: "这个是ap.js去刷新的" });
}
})
a.wxml
{{msgdata}}
也许,这个可以说明小程序也是一个spa应用?