大家好,我是南宫,最近我在做一个用avue的项目,感觉这个框架的生态非常不友好啊,找不到官方交流群之类的,文档也写得特简单,我感觉阅读项目的旧代码比看官方文档学习方便多了。

avue的crud组件看起来非常强大,就一个表格组件,配一配数据,配一配表格的分列,一个整整齐齐还自带分页组件的表格就出来了,而且一进入页面,就自动查询啊,很方便,有木有?

但是我现在的需求有一点特殊:我要获取的数据,不仅仅是有接口地址就可以请求的,而是需要一个必填参数,那就是月份。而我即使是在mounted就马上获取当前月份并设置到请求参数,也还是来不及“一进入页面”的加载。

懂了!所以禁止掉一进入页面的加载,改成mounted准备好参数以后再发请求嘛。

为什么crud组件可以做到“一进入就加载”呢?这个我在官方文档没有找到说明,但是通过模板代码我知道了,是因为监听了on-load事件,监听到以后发了请求。所以去掉on-load的监听,就没事了呗。

但是我很快又遇到了第二个问题,那就是,切换下面的分页组件的页大小以后,数据展示出来的页大小并没有同步改变

elementUI的分页组件,是可以监听切换页大小事件的,可以做一些处理。但是avue的封装得太彻底了,以至于我在代码上完全捕捉不到分页组件的痕迹,官方文档上也没有对应的说明,怎么办?

我打开了另外一个能正常使用的页面,结果看到我一改变页的大小,控制台就输出来一串熟悉的文字,嗯,这不是调用XXX函数会输出的吗?为什么这里会调用XXX函数?去检查了那个页面的代码,发现调用XXX函数被我写到了on-load事件处理函数这里

破案了,切换页的大小,会触发on-load事件!所以页大小没有同步改变是因为我没有监听on-load,所以我应该在这个页面也恢复使用on-load监听,为了不缺少月份参数,我在请求之前判断是否还未选择月份,如果是,就设置为当月,这样,请求就不会失败了。

第三个问题又出现了——虽然现在on-load一开始发请求不会缺少参数了,但是切换分页的大小以后,仍然没有同步改变。这我就真的不知道原因了。

但是我突然有了个想法——为什么改变了页的大小,页面就会知道页的大小是多少?从哪里知道的?根据经验,像这样的组件库的自定义事件应该会传过来一些数据,于是我在on-load的事件监听函数里拿到并输出了这个事件对象e,果然有东西!这是一个对象,里面有pageSize属性


接下来,把pageSize的值手动赋值到this.page上,就可以了,因为发请求的时候总是要使用到this.page。

 因为感觉avue的生态实在是太不完全了,所以我会在遇到框架使用方面的问题的时候尽可能的记录,希望能帮到有类似需求的小伙伴,感谢你的阅读。

Logo

前往低代码交流专区

更多推荐