所遇问题:dom
该页面为双选项卡联动,四个部分都须要上拉加载和下拉刷新功能,使用的mint-ui的loadmore插件,分别加上上拉加载后,只有最后一个的this.$refs.loadmore.onTopLoaded();和this.$refs.loadmore.onBottomLoaded();ui
有效,其余的三个都无效,这两句话是意思是查询完要调用一次,用于从新定位 this
分析缘由:插件
首先这四个模块都是用的blog
<mt-loadmore :top-method="loadTop"索引
:bottom-method="loadBottom"接口
:bottom-all-loaded="allLoaded"事件
ref="loadmore">input
<ul class="ul-box">it
<li class="list-cell ta-line" v-for="(item,index) in gridNoPayMail" :key="item+'walletdetail1'" @click="choose(index)">
<div class="checkboxOne">
<input type="checkbox" name="checkInput" :id="'id1' + index" v-model="item.checked" disabled/>
<label :for="'id1' + index"></label>
</div>
<div class="left-text">
<p class="award">{{item.a}}</p>
<p class="time">{{item.b}}</p>
</div>
<div class="right-text">
<p class="addinfo">¥{{item.c}}</p>
</div>
</li>
</ul>
</mt-loadmore>
top-method和bottom-method,bottom-all-loaded分别赋予不一样的事件名,前两个事件分别表示下拉,上拉,第三个若为真,则 bottomMethod 不会被再次触发,通常进入页面咱们默认为false
调用接口成功后进行的取消加载的判断,这里能够给接口的方法一个type值,若是type为top1时则证实正在进行的是下拉刷新执行this.$refs.loadmore1.onTopLoaded();,上拉加载同理,其余三个模块同理
if(type=='top1'){
this.$refs.loadmore1.onTopLoaded();
}else if(type=='bottom1'){
this.$refs.loadmore1.onBottomLoaded();
}
到了这里就会出现开始所描述问题,
解决方法
一开始作了不少尝试,好比利用v-if当一个模块显示时让其余三个隐藏,老是会出现不一样的问题,后来将ref="loadmore"中ref后的参数在四个模块中作了区分好比分别为loadmore1,loadmore2……,这里我是这样理解的,ref 在此的做用为子组件指定一个索引 ID,相似于dom元素的id,id名不能相同,因此咱们将ref修改成不一样的参数,问题解决,
文章来源于 竹生云野处