当前位置: 首页 > news >正文

织梦做的网站打不开网页达内教育

织梦做的网站打不开网页,达内教育,网站建设图片像素是多大的,软件开发一个月多少钱1) 背景: 老项目翻新时,发现一个下拉框数据非常多,客户呢,希望全部数据一起展示,意思就是全部数据一起返回给前端用于展示。但这会造成明显的卡顿。~~明显的不合理! QAQ!~~ 于是压力给到前端,查询资料,各种…
 1) 背景:

        老项目翻新时,发现一个下拉框数据非常多,客户呢,希望全部数据一起展示,意思就是全部数据一起返回给前端用于展示。但这会造成明显的卡顿。~~明显的不合理! QAQ!~~ 


    于是压力给到前端,查询资料,各种搜索,最终找到2个解决方案。
    1、在el-select下拉框中添加分页组件,让用户点击下一页下一页
    2、在el-select下拉框中数据,触底加载


    当然最终选择了第二个方案,用户体验会更好。
    由于项目中有多个地方使用到 且 可能单个页面中会用到多次,为了复用选择了自定义指令的方式去实现。
    

 2) 先来看看实现的效果

3) 思路
  • 触底加载,哪个元素滚动触底时加载?
    • 承装下拉框中所有元素的容器(.el-scrollbar__wrap)
  • 触底时,触发方法做什么?
    • 触底时,继续向后端发请求获取下一页的数据,请求回来的数据合并给options
4) 简单的写一下.vue文件代码


接口数据是自己用node写的

后端代码在这里:GitHub - stella99888/tao-express: Vue2+Express

```javascript<!-- 下拉框触底加载页面 --><template><div class="m-4"><p>第一个select</p><el-select v-model="value" v-loadmore="loadmore" :teleported="false" style="width:240px"><el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" /></el-select><p>第二个select</p><el-select v-model="value" v-loadmore="loadmore" :teleported="false" style="width:240px"><el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" /></el-select></div></template><script setup>
import axios from 'axios';
import { onMounted, reactive, ref } from 'vue'const list = ref([])
const options = ref([])
const option = ref([])
const value = ref([])
const loading = ref(false)
let pageData = reactive({pageIndex: 1,pageSize: 10
})
onMounted(() => {getOptions()
})
const getOptions = () => {axios.get(`http://localhost:9999/getSelectOptions?pageIndex=${pageData.pageIndex}&pageSize=${pageData.pageSize}`).then(res => {console.log(res.data);if (res.data.length < 1) {ElMessage({message: '没有更多数据了...',type: "warning",});}const newOptions = res.data.map((item) => {return { value: item.name, label: item.index }})options.value.push(...newOptions)})
}
// 触底了,继续发请求
const loadmore = () => {pageData.pageIndex = pageData.pageIndex + 1getOptions()
}
</script>

* 注意一下:
 1. teleported属性为官网提供,是否将下拉列表插入至 body 元素,默认值为true,插入到body元素中。

>  这是插入body中的

> 这是不插入body中的(可以对比下)

 2. 我们需要将其插入body元素中吗?如果是单个页面中只出现一个,那影响不大;如果是多个,我们要选中该元素时就很不方便了。 
 3. 且,我们这边使用的是自定义指令的方式,指令在el-select元素上,teleported为false,不插入body时,正好可以在自定义指令中使用el.querySelector('.el-scrollbar__wrap')获取滚动的元素。
 

5) 自定义指令

前端代码在这里:GitHub - wwaini/tao-vue3 at release240625

// src/directives/loadmore/index.js
import { debounce } from "lodash";export default {mounted(el, binding) {// 不插入body时,以下方式可获取元素// 插入body时,需要以document.querySelector('.el-scrollbar__wrap')获取let scrollWrap = el.querySelector('.el-scrollbar__wrap')// 把监听的方法防抖一下const handle = debounce((e) => {let scrollDistance = scrollWrap.scrollHeight - scrollWrap.scrollTop// 比如此处预留10个像素的位置用于触底if (scrollWrap.clientHeight + 10 > scrollDistance) {binding.value() // 触底通知一下,外界}}, 170)// 绑定监听滚动事件scrollWrap?.addEventListener('scroll', handle)// 方法挂载到元素身上便于解绑时使用el._hanlde = handle},unmounted(el, binding) {let scrollWrap = document.querySelector('.el-scrollbar__wrap')scrollWrap?.removeEventListener('scroll', el._hanlde)el._hanlde = null}
}
// directives/index.js
import loadmore from "./loadmore"
// 自定义指令对象,用于遍历注册
const directives = {loadmore
}
// 批量注册指令并暴露到main.js中去便于注册
export default {install(app) {Object.keys(directives).forEach((key) => {app.directive(key, directives[key])})}
}
// main.js
import { createApp } from 'vue';
import App from './App.vue';const app = createApp(App);// 引入并使用自定义指令
import directive from './directives'
app.use(directive);app.mount('#app');
// src/views/num/six.vue<!-- 下拉框触底加载自定义指令 --><template><div class="m-4"><p>第一个select</p><el-select v-model="value" v-loadmore="loadmore" :teleported="false" style="width:240px"><el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" /></el-select><p>第二个select</p><el-select v-model="value" v-loadmore="loadmore" :teleported="false" style="width:240px"><el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" /></el-select></div></template><script setup>
import axios from 'axios';
import { onMounted, reactive, ref } from 'vue'const list = ref([])
const options = ref([])
const option = ref([])
const value = ref([])
const loading = ref(false)
let pageData = reactive({pageIndex: 1,pageSize: 10
})
onMounted(() => {getOptions()
})
const getOptions = () => {axios.get(`http://localhost:9999/getSelectOptions?pageIndex=${pageData.pageIndex}&pageSize=${pageData.pageSize}`).then(res => {console.log(res.data);if (res.data.length < 1) {ElMessage({message: '没有更多数据了...',type: "warning",});}const newOptions = res.data.map((item) => {return { value: item.name, label: item.index }})options.value.push(...newOptions)})
}
// 触底了,继续发请求
const loadmore = () => {pageData.pageIndex = pageData.pageIndex + 1getOptions()
}</script>


如有不足,欢迎指正。

不要忽视你达成的每个小目标,它是你前进路上的垫脚石。冲!
 

http://www.qdjiajiao.com/news/12855.html

相关文章:

  • 沈阳定制网站制作软文广告属于什么营销
  • html5结构的网站百度百家号注册
  • 佛山网站建设 奇锐科技广告推广的软件
  • 网站集约化建设什么意思廊坊seo外包公司费用
  • 海宁网站建设公司推荐上海百度竞价点击软件
  • 广州市公司网站建设价格郑州seo询搜点网络效果佳
  • 网站模板但没有后台如何做网站steam交易链接怎么获取
  • 网站开发中的著作权归属医院线上预约
  • 网站建设技术线路选择成都网站seo技巧
  • 网站推广怎么优化301313龙虎榜
  • 芜湖住房和城乡建设委员会网站自己创建一个网站需要多少钱
  • 加强政府门户网站建设通知网站seo属于什么专业
  • wordpress 主题翻译重庆网站seo好不好
  • 做网站维护工资多少合肥百度关键词推广
  • 怎么做网站弹出公告seo公司发展前景
  • 3g网站制作武汉搜索引擎排名优化
  • 网页翻译网站可以推广赚钱的软件
  • 什么网站可以做医疗设备的怎样打百度人工客服热线
  • 福州专业做网站的公司58网络推广
  • 做银行应该关注的网站网络优化初学者难吗
  • 网络广告是较为常见的一种网络营销方式seo外链优化方法
  • 重庆网站icp备案查询百度爱采购平台登录
  • 服务器做jsp网站教程视频播放如何加入百度推广
  • 百度收录新网站网站模板定制
  • 网站自己做服务器正规seo关键词排名网络公司
  • 成都淮州新城建设投资有限公司网站谷歌seo运营
  • 网站开发公司杭州网站建设营销宣传方式有哪些
  • 网站的banner做多大郑州网站制作工具
  • 商城网站制作方案seo标题优化裤子关键词
  • 那里做直播网站长春百度网站快速排名