vue实现滚动加载更多功能---通过自定义指令(directives)

以下方法是通过directives局部自定义指令,实现页面中某一区域滚动到一定scrollTop值后加载更多(加载下一页)

思路:在组件中注册一个局部自定义指令loadmore 监听div的滚动事件,在template需要实现加载更多的div绑定自定义指令,当达到一定的滚动高度后触发methods里面的方法,具体实现看以下代码

template部分

<template>
  <div v-loadmore="loadSearchMore">
     这里循环记载展示的列表,div是有滚动条的
  </div>
</template>

js部分

data() {
   return {
     pn: 1, // 默认加载第一页
     loadSign: true, // 加载更多的标识
   }
}

methods: {
    loadSearchMore() {
      if (this.loadSign) {
        this.loadSign = false
        this.pn++
        if (this.pn <= this.data.pageinfo.pagecount) {
           this.loadSign = true
            // 把pn传到对应的搜索接口 实现加载下一页 把加载多次得到的list concat
           this.search(this.pn) 
        } else {
          console.log('到底了')
        }
      }
   }

自定义指令

directives: {
    loadmore: {
      bind: function(el, binding) {
        let bottomOffset = 0
        el.addEventListener('scroll', () => {
          if (el.scrollHeight - (el.scrollTop + el.clientHeight) < 300) {
            // 触发指令绑定的函数
            binding.value()
          }
        })
      }
    }
  }

 

大家可以看看自定义指令的相关钩子

钩子函数

指令定义函数提供了几个钩子函数(可选):

  • bind: 只调用一次,指令第一次绑定到元素时调用,用这个钩子函数可以定义一个在绑定时执行一次的初始化动作。

  • inserted: 被绑定元素插入父节点时调用(父节点存在即可调用,不必存在于 document 中)。

  • update: 被绑定元素所在的模板更新时调用,而不论绑定值是否变化。通过比较更新前后的绑定值,可以忽略不必要的模板更新(详细的钩子函数参数见下)。

  • componentUpdated: 被绑定元素所在模板完成一次更新周期时调用。

  • unbind: 只调用一次, 指令与元素解绑时调用。

钩子函数参数

钩子函数的参数有:

  • el: 指令所绑定的元素,可以用来直接操作 DOM 。
  • binding: 一个对象,包含以下属性:
    • name: 指令名,不包括 v- 前缀。
    • value: 指令的绑定值, 例如: v-my-directive="1 + 1", value 的值是 2
    • oldValue: 指令绑定的前一个值,仅在 update 和 componentUpdated 钩子中可用。无论值是否改变都可用。
    • expression: 绑定值的表达式或变量名。 例如 v-my-directive="1 + 1" , expression 的值是 "1 + 1"
    • arg: 传给指令的参数。例如 v-my-directive:foo, arg 的值是 "foo"
    • modifiers: 一个包含修饰符的对象。 例如: v-my-directive.foo.bar, 修饰符对象 modifiers 的值是 { foo: true, bar: true }
  • vnode: Vue 编译生成的虚拟节点。
  • oldVnode: 上一个虚拟节点,仅在 update 和 componentUpdated 钩子中可用。

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`ag-Grid-Vue` 是一个基于 Vue.js 的 `ag-Grid` 的封装组件,它是 `ag-Grid`(一个功能强大的数据表格和网格组件库)在 Vue 框架中的实现滚动条触底加载更多(Infinite Scroll or Virtual Scrolling)是 ag-Grid 提供的一种功能,用于在用户滚动到表格底部时自动加载更多行,而不是一次性加载所有数据,从而提高性能和用户体验。 在 ag-Grid-Vue实现滚动条触底加载更多的步骤通常包括: 1. 配置列:在 ag-Grid 的列定义中启用 `infiniteScroll` 属性,并设置 `scrollThreshold` 参数,指定当滚动到底部多少距离时触发加载。例如: ```html <ag-grid-vue :columnDefs="columnDefs" :infiniteScroll="true" scrollThreshold="100"></ag-grid-vue> ``` 这里 `100` 表示当滚动条距离底部小于100px时开始加载更多数据。 2. 数据分页:你需要确保数据源是分页的,可以使用 ag-Grid 的 `gridApi.getRowNode` 方法获取当前可视区域的行号范围,然后从后向前逐页加载。 3. 加载事件处理:在 Vue 组件中监听 `onGridReady` 或其他适当的事件,当滚动到底部时触发加载更多数据的请求,并数据源。示例: ```javascript mounted() { this.gridApi.addEventListener('scroll', this.handleScroll); }, methods: { handleScroll(params) { if (params.isEnd && params.isLastRenderedPage) { // 加载更多数据 this.loadMoreData(); } }, loadMoreData() { // 假设你有一个接口 `loadNextPage` 用于请求更多数据 this.loadNextPage().then(() => { // 新行数,告诉 ag-Grid 加载完成 this.gridApi.sizeColumnsToFit(); }); } } ``` 4. 新视图:加载数据后,你需要将其添加到现有数据的末尾,并调用 `gridApi.sizeColumnsToFit()` 来调整列宽以适应新的内容。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值