[BUG]自定义组件Component当页面事件执行时this对象不完整或不一致
发布于 7 年前 作者 jiejin 16805 次浏览 来自 问答

如果页面json中声明usingComponents,当运行期,事件执行时,this关键词对象类型不一致,本来应该是page对象本身,但是其实不是😢,最大的区别是用组件时少了route字段,只有私有的那个__route__。这个bug可以很容易重现:

/**

  * 生命周期函数–监听页面加载

  */

onLoad: function (options) {

    console.log(this);

}

对应的页面json里,声明usingComponents和不声明usingComponents,两次打印的不一样(大体看上去一样,其实不一样😄)。



求一致啊!!!!!!!!!!!!!!!

8 回复

有时候一些页面公用的部件是需要监听Page的事件的, 比如我们做一个底部浮动工具条,如果产品体验做的细致一些的话,就需要监听Page的滚动事件, 在页面向上滚动的时候隐藏,向下滚动的时候显示(就好像Safari浏览器的工具条)。目前我们能想到的都是土办法,一种是最容易想到的在页面的Page.onPageScroll处理,但是这种方法组件和Page有耦合,每个使用这个工具条的Page都需要写一次。那另一个方法就是在组件内部完成,这就需要重写Page的各个系统事件,实现调用监听和处理分发。我们是把每个组件要监听的Page事件都存到了一个对象上,通过route来记录的

感谢反馈。这是个我们正在准备上线修正的bug。

你好,如果是route字段缺失的问题,是因为route字段被暂时移除了,我们会补回来。请问你使用route字段的目的是什么呢?

你好,这个bug怀疑与animation有关。能否提供一下相关代码?

另外,虽然现在容错了一下,临时解决了部分字段没有的问题,但是还是会遇到下面这个错误,这个实在不知道应该从哪入手,这个阶段是WXML的问题导致的?

好的,知道这个就好办了,我们先检查一下 O(∩_∩)O 谢谢

@LastLeaf

果真!!!!!!!!

<view animation="{{__animationData}}"></view>

如果__animationData初始值为null的时候,就会报上图那个错误。感觉这个也算Bug吧,不使用组件的时候就没事。

谢谢啦,这次遇到的两个问题都解决,哈哈,感谢!!!!!!!!!

请问this不一致的问题解决了吗?

回到顶部