01### 自定义loadmore触底加载指令
01创建directives.js,放在utils文件夹下;代码如下:
import Vue from 'vue'
Vue.directive('loadmore', {
bind (el, binding) {
const SELECTWRAP_DOM = el.querySelector('.el-select-dropdown .el-select-dropdown__wrap')
SELECTWRAP_DOM.addEventListener('scroll', function () {
const CONDITION = this.scrollHeight - this.scrollTop <= this.clientHeight
if (CONDITION) {
binding.value()
}
})
},
})
Vue.directive('loadmore2', {
bind(el, binding, vnode){
let wrapDom = el.querySelector(".el-autocomplete-suggestion__wrap")
let listDom = el.querySelector(".el-autocomplete-suggestion__wrap .el-autocomplete-suggestion__list")
wrapDom.addEventListener("scroll",(e)=>{
let condition = wrapDom.offsetHeight + wrapDom.scrollTop - 20 - listDom.offsetHeight
if(condition > 0 && !vnode.context.loading){
binding.value()
}
},false)
}
})
02在main.js中全局引用:// import ‘@/utils/directives.js’
import directives from '@/utils/directives.js'
Vue.use(directives);
import '@/utils/directives.js'
02使用
<el-form-item label="所在小组:" label-width="100px" class="required">
<el-select
value-key="code"
id="groupLimit"
filterable
remote
v-model="formLabelAlign.groupId"
placeholder="请选择"
popper-class="popperselect"
v-loadmore = "groupMore"
:remote-method="remoteGroup"
>
<el-option
v-for="item in groupOptions"
:key="item.value"
:label="item.name"
:value="item.value"
>
</el-option>
</el-select>
</el-form-item>
data() {
return {
groupOptions: [],
groupParams:{
pageNumber: 1,
pageSize: 9,
groupName:""
}
};
},
initdate() {
serviceApi.getAllGroup(this.groupParams).then((res) => {
this.groupOptions = res.result.list
this.groupOptions = [
{ groupName: "全部", groupId: "" },
...this.groupOptions
];
this.formLabelAlign.groupId = this.$route.query.groupName;
});
},
remoteGroup(query) {
this.groupParams.loadGroupName = query;
const groupList = this.groupOptions;
if (query !== "") {
this.groupOptions = [];
this.initdate()
console.log(555555555555555,this.groupOptions);
}
},
groupMore() {
this.groupParams.groupPageNumber++;
this.initdate()
},