小朱葛
小朱葛
  • 发布:2019-11-03 21:40
  • 更新:2020-12-10 14:51
  • 阅读:5046

【报Bug】nvue uniapp模式 list组件中套cell组件,每个cell组件都绑定唯一的ref, 然后使用weex 的dom.scrollToElement(el, {}); 函数无效

分类:nvue

<list class="HM-chat-content" @touchstart="listTouchStart">
<refresh class="loading" @refresh="onrefresh" @pullingdown="onpullingdown">
<image class="spinner" src="/static/img/loadingmore.gif"></image>
</refresh>
<cell class="messages" v-for="(row,index) in messages" :key="index" :ref="refMsg${row.id}">
<text>{{row.name}}</text>
</cell>
</list>

相关js代码 用watch监听 messages的变化后,滚动到最低部

watch: {
messages(msgs) {
this.$nextTick(() => {
const scrollToCell = this.$refs[refMsg${msgs[msgs.length - 2].id}];
if(scrollToCell) {
dom.scrollToElement(scrollToCell , {});
}
}
}

2019-11-03 21:40 负责人:无 分享
已邀请:
[已删除]

[已删除]

this.$refs[refMsg${msgs[msgs.length - 2].id}][0]

  • 小朱葛 (作者)

    666, 可以老铁

    2020-01-11 14:35

  • zgoin

    回复 小朱葛: iOS的可以吗?“this.$refs[节点名]” iOS的返回是这个节点,而不是数组。安卓难道返回的是数组?是weex的bug吧,两端返回不一样

    2020-03-09 16:55

  • 我是大神的弟子

    回复 zgoin: 用楼上那个,IOS很流畅啊,Android有时候没反应,有时候能滚动到指定位置

    2020-04-14 08:19

  • 我是大神的弟子

    回复 小朱葛: 大佬,最后怎么搞的哦

    2020-04-14 08:19

  • 小朱葛 (作者)

    回复 我是大神的弟子: 就是 this.$refs[refMsg${msgs[msgs.length - 2].id}][0] 这样解决的,我之前的this.$refs[refMsg${msgs[msgs.length - 2].id}],其实并没有获取到那个对象

    2020-04-23 21:56

DCloud_uni-ad_HDX

DCloud_uni-ad_HDX

请提供示例代码

  • 小朱葛 (作者)

    我在上面加了代码,每个cell都绑定了refMsg ,监听messages 但是 dom.scrollToElement 无效,在weex官网看的实例是有效的

    2019-11-04 10:55

[已删除]

[已删除]

今天刚用这个, 有效

2***@qq.com

2***@qq.com

// cell class="messages" v-for="(row,index) in messages" :key="index" ref="refMsg"

const scrollToCell = this.$refs.refMsg[index];

不要动态绑定ref。 动态绑定拿到的el不是Object, 似乎是BUG。 只能固定绑定 ref="refMsg" ,然后 this.$refs.refMsg 拿到一个数组, 这时候找到对应的el对象就好了

  • 小朱葛 (作者)

    嗯,动态绑定绑定其实也可以,最主要是 this.$refs.refMsg 得到的是一个数组

    2020-04-23 21:58

1***@qq.com

1***@qq.com - sdf

在做一个聊天的demo,ios只能滚动一点距离,没有滚动到最后一个dom

<free-chat-item ref="chatItem" @long="long" :item="item" :index="index" :pretime="index > 0 ? list[index - 1] : 0"></free-chat-item>
上面的组件绑定ref

        let lastIndex = chatItem.length > 0 ? chatItem.length - 1 : 0;  
            if (chatItem[lastIndex]) {  
            dom.scrollToElement(chatItem[lastIndex], {})  
    }

这边是获取到最后一个dom, 然后滚动

现在是在安卓键盘弹起 一切正常的 滚到最后一个dom

在ios只能滚动一小点距离 ,然后我怀疑是键盘弹起导致的

在外层包了一个定时器

setTimeout(() => {  
                let chatItem = this.$refs.chatItem;  
                let lastIndex = chatItem.length > 0 ? chatItem.length - 1 : 0;  
                if (chatItem[lastIndex]) {  
                    dom.scrollToElement(chatItem[lastIndex], {});  
                }  
            }, 3000)

ios 正常滚动到底部了
但是现在咋处理呢 不可能放个定时器在这吧 老哥们

b***@126.com

b***@126.com

您好~~我在nvue页面 用<list>和<cell>, 为啥会报这个错啊Unknown custom element: <list>

该问题目前已经被锁定, 无法添加新回复