之前小程序项目没有使用任何框架,本来开发时间太早,那会儿小程序生态不是很成熟,最近项目松,想把之前的代码重构一下,选用的wepy框架,之所以选择wepy,最重要的原因还是由于它是腾讯开源的框架,在使用中也遇到了一些问题,会持续把遇到的问题记下来;
(1)在app.wpy文件中,我自定义了一些方法,其中包括对request的封装,根据官方文档描述,在page页面可以使用this.$parent来获取,如下
app.wpy doPost() { console.log('app.wyp')}...index.wpy // page页面...onLoad() { console.log(this.$parent.doPost()) "app.wpy"}复制代码
如果只是单纯的page页面使用,那是不会有什么问题的; 如果在component组件页面,如下
index.wpy // page页面import wepy from 'wepy';import tel from '../components/tel' // component组件页面export default class Index extends wepy.page { components = { tel }}tel.wpy //组件页面import wepy from 'wepy';export default class Conchat extends wepy.component { onLoad() { console.log(this.$parent) // 会指向父组件 console.log(this.$parent.$parent) // 会指向app.wpy }}复制代码
wepy官方文档中是这么写的:https://tencent.github.io/wepy/document.html#/api?id=wepycomponent-class
现在还有一种情况,会导致一些问题,大家都知道,wepy完全是类vue的开发风格,它里面也有mixin混合功能,这个无疑为我们开发带来很高的体验,接着上面的问题,如果在mixin中定义了一个公用的方法,如下:
mixin.jsimport wepy from 'wepy';export default class ScanRed extends wepy.mixin { onLoad() { console.log(this.$parent.doPost()) }}index.wpy;...mixins = [mixin];输出的结果为"app.wpy";tel.wpy;...mixins = [mixin];代码就会报错,doPost方法是未定义的复制代码
这是因为,在tel.wpy中,this.$parent指向的是index.wpy; 这个时候就有点尴尬了。。。
所以在mixin定义的js中,我们可以使用wepy.$instance
wepy.$instance === this.$parent //true复制代码
这个在官方文档中没有提及,可能不是很建议这种方法吧,其实在我遇到这个问题的时候,我也发现自己之前的写法上面有点错误,最好的处理方式是,自定义的方法和类,建立一个单独的js文件,这样就不会有这种尴尬了;