<view style="height: 100px; background-color: #ececec;">
<list-view ref="listView" style="height: 100px;" :scroll-into-view="lastItemId">
<list-item v-for="(item,index) in getBleDataList" :key="index" type=0 :style="{flexDirection: 'row'}" :id="'listItem' + index">
<view style="flex-direction: row; width: 80px;">
<text v-if="getSendTimeIsSelected" style="color: grey; font-size: 14px;">{{(item as bleDataObj).timeStr}}</text>
<text v-if="isReciveData(item as bleDataObj)" style="color: orange; font-size: 14px;">-></text>
<text v-else style="color: #00ff7f; font-size: 14px;"><-</text>
</view>
<text
v-if="getSendDataIsSelected" :style="{color: '#000000', fontSize: '14px', width: appwidth - 80 + 'px'}">{{(item as bleDataObj).dataStr}}</text>
</list-item>
</list-view>
</view>
我这里是一个list-view,我现在的场景是我收到数据就会重新渲染这个list-view,并且我想让他内容在最下面,我把这个list-view封装成了一个组件,在其他页面复用,之后我在收到数据源发生改变的时候调用DMO API
initProperty() {
this.appwidth = KLDSysUtil.getInstance().getAppWidth()
bleDataIsChange({
success: () => {
this.$nextTick(() => {
this.$forceUpdate()
this.scrollToBottom()
})
},
})
},
// list-view滚动到底部
scrollToBottom () {
const listView = this.$refs["listView"] as UniElement
const height = listView.scrollHeight
listView.scrollTop = height as number
// console.log("从" + this.lastItemId);
// if (!KLDSysUtil.getInstance().arrayIsEmpty(KLDBleStateObjc.bleDataList)) { // 该方式官方可能存在问题,暂时使用上面的方式
// // 更新最后一个列表项的 ID
// this.lastItemId = "listItem" + (KLDBleStateObjc.bleDataList.length - 1);
// } else {
// this.lastItemId = ""; // 无数据时清空
// }
// console.log("滚动到" + this.lastItemId);
},
发现无法实现效果,最开始想着是使用scroll-to-view的方式实现,但是也不生效,后来在论坛里发现了有人说在组件中使用这个属性不生效,所以现在想着用DOM API的方式,这个DOM API我在非组件页面,就是只有一个lies-view页面的里面使用是生效的,难道在组件中,这个API也不生效了么,有什么解决方案么
Somnus040 (作者)
好的,我再看一下,我发现我复用了4个页面,之后在最后一个加载的这个对象生效了,之前的三个都不会滚动到最下面
2025-05-21 10:30
Somnus040 (作者)
确实是这样,为什么呢,比如我有3个页面都是相同的方式直接复用的这个对象,只有第三个能自动滚动到最下面,第一个第二个都不行
2025-05-21 10:34
2***@qq.com
回复 Somnus040: 动态修改ref名 ref="listView"
2025-05-21 11:32
2***@qq.com
回复 Somnus040: 加载哪个滚动哪个 为什么要同时滚动好几个
2025-05-21 11:35