uniapp開發手機APP、H5網頁、微信小程序、長列表插件

ml-list

插件地址:https://ext.dcloud.net.cn/plugin?id=18928

ml-list介紹

1、ml-list 列表組件,包含基本列表樣式、可擴展插槽機制、長列表性能優化、多端兼容
2、ml-list 低代碼列表,幫助使用者快速構建列表,簡單配置,快速上手。
3、支持自定義懶加載,優化長列表渲染性能,提升視圖渲染效率.

ezgif-1-a6423aa111

ezgif-1-46f8fa65d9

安裝方式

本組件符合easycom規范,HBuilderX 2.5.5起,只需將本組件導入項目,在頁面template中即可直接使用,無需在頁面中import和注冊components

代碼演示

以下代碼均可復制粘貼直接運行

不使用插槽,showListIndex:可自定的高擴展的 懶加載機制,優化長列表提升渲染效率,提高用戶體驗。

<template><button :type="column==1?'primary':''" @click="change(1)">單列</button><button :type="column==2?'primary':''" @click="change(2)">雙列</button><button :type="showCount>0?'primary':''" @click="changeCount(10)">使用showListIndex</button><button :type="showCount<=0?'primary':''" @click="changeCount(0)">不使用showListIndex</button><ml-listv-if="list&&list.length>0":column="column":list="list" ref="mlListRef":noMore="noMore" :showListIndex="showCount"@rowClick="rowClick"><!--  還可以增加其他內容,這里的內容可有可無--><template v-slot="{item, index}"><text style="color: #ff8f0e;">{{index + 1}}不改變組件的上,繼續增加內容</text></template></ml-list>
</template>
<script setup>import { ref } from 'vue';import { onLoad, onReachBottom, onPullDownRefresh } from '@dcloudio/uni-app';const column = ref(1);const showCount = ref(10);const list = ref([]); // 列表數據const noMore = ref(false); // 是否沒有更多數據了const mlListRef = ref(null); // mlList 組件實例,mlListRef.value.refreshList();刷新視圖列表let counter = 1;const change = (num) => {list.value = [];counter = 1;loadMore();column.value = num;uni.showToast({ title: num+"", icon:"none", mask:false });};const changeCount = (num) => {list.value = [];counter = 1;loadMore();showCount.value = num;uni.showToast({ title: num+"", icon:"none", mask:false });};/*** 加載更多*/const loadMore = () => {uni.showLoading({ title: "加載中。。。" });setTimeout(() => {uni.hideLoading();getList().forEach((item) => {item.title = `[${list.value.length + 1}]${item.title}`;list.value.push(item);});}, 500);};/*** 點擊了列表* @param row 當前行數據* @param index 當前行的索引*/const rowClick = (row, index) => {console.log(index, row);uni.showToast({ title:row.title, icon:"none", mask:false });};/*** 下拉刷新,需要在page.json中開啟下拉刷新功能*/onPullDownRefresh(() => {list.value = []; // 重新請求后臺,刷新當前頁面數據uni.showLoading({ title: "加載中。。。" });// 模擬請求后臺,獲取數據setTimeout(() => {uni.hideLoading();// 加載到數據后,停止刷新uni.stopPullDownRefresh();getList().forEach((item) => {item.title = `[${list.value.length + 1}]${item.title}`;list.value.push(item);});}, 500);});/*** 滑動到底,加載更多數據*/onReachBottom(() => {// 更新列表數據mlListRef.value.refreshList();if (counter >= 3) {noMore.value = true;return;}counter ++;loadMore();});/*** 頁面加載,請求后臺 獲取數據*/onLoad(() => {// 模擬請求后臺,拿到數據uni.showLoading({ title: "加載中。。。" });setTimeout(() => {uni.hideLoading();getList().forEach((item) => {item.title = `[${list.value.length + 1}]${item.title}`;list.value.push(item);});}, 500);});/*** 模擬 后臺返回的數據列表*/const getList = () => {let tempList = [];for (var i = 0; i < 15; i++) {tempList.push({title: "List 列表組件,包含基本列表樣式、可擴展插槽機制、長列表性能優化、多端兼容。",url: "https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/shuijiao.jpg",});};return tempList;  };
</script>

注意:如果使用了showListIndex,則觸發onReachBottom觸底事件時,一定要調用refreshList()方法來刷新視圖,mlListRef.value.refreshList();

使用自定義插槽,開始自定義插槽:itemSlot="true"showListIndex:可自定的高擴展的 懶加載機制,優化長列表提升渲染效率,提高用戶體驗。

<template><button :type="column==1?'primary':''" @click="change(1)">插槽單列</button><button :type="column==2?'primary':''" @click="change(2)">插槽雙列</button><button :type="showCount>0?'primary':''" @click="changeCount(10)">使用showListIndex</button><button :type="showCount<=0?'primary':''" @click="changeCount(0)">不使用showListIndex</button><ml-listv-if="list&&list.length>0":column="column":list="list" ref="mlListRef":itemSlot="true":noMore="noMore" :showListIndex="showCount"@rowClick="rowClick"><!-- :itemSlot="true" 使用插槽,開啟自定義配置 --><template v-slot:item="{item, index}"><image :src="item.url" style="width:99%;height:100px;"></image><text style="color: #ff8f0e;">自定義插槽</text><text> {{item.title}} </text></template></ml-list>
</template>
<script setup>import { ref } from 'vue';import { onLoad, onReachBottom, onPullDownRefresh } from '@dcloudio/uni-app';const column = ref(1);const showCount = ref(10);const list = ref([]); // 列表數據const noMore = ref(false); // 是否沒有更多數據了const mlListRef = ref(null); // mlList 組件實例,mlListRef.value.refreshList();刷新視圖列表let counter = 1;const change = (num) => {list.value = [];counter = 1;loadMore();column.value = num;uni.showToast({ title: num+"", icon:"none", mask:false });};const changeCount = (num) => {list.value = [];counter = 1;loadMore();showCount.value = num;uni.showToast({ title: num+"", icon:"none", mask:false });};/*** 加載更多*/const loadMore = () => {uni.showLoading({ title: "加載中。。。" });setTimeout(() => {uni.hideLoading();getList().forEach((item) => {item.title = `[${list.value.length + 1}]${item.title}`;list.value.push(item);});}, 500);};/*** 點擊了列表* @param row 當前行數據* @param index 當前行的索引*/const rowClick = (row, index) => {console.log(index, row);uni.showToast({ title:row.title, icon:"none", mask:false });};/*** 下拉刷新,需要在page.json中開啟下拉刷新功能*/onPullDownRefresh(() => {list.value = []; // 重新請求后臺,刷新當前頁面數據uni.showLoading({ title: "加載中。。。" });// 模擬請求后臺,獲取數據setTimeout(() => {uni.hideLoading();// 加載到數據后,停止刷新uni.stopPullDownRefresh();getList().forEach((item) => {item.title = `[${list.value.length + 1}]${item.title}`;list.value.push(item);});}, 500);});/*** 滑動到底,加載更多數據*/onReachBottom(() => {// 更新列表數據mlListRef.value.refreshList();if (counter >= 3) {noMore.value = true;return;}counter ++;loadMore();});/*** 頁面加載,請求后臺 獲取數據*/onLoad(() => {// 模擬請求后臺,拿到數據uni.showLoading({ title: "加載中。。。" });setTimeout(() => {uni.hideLoading();getList().forEach((item) => {item.title = `[${list.value.length + 1}]${item.title}`;list.value.push(item);});}, 500);});/*** 模擬 后臺返回的數據列表*/const getList = () => {let tempList = [];for (var i = 0; i < 15; i++) {tempList.push({title: "List 列表組件,包含基本列表樣式、可擴展插槽機制、長列表性能優化、多端兼容。",url: "https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/shuijiao.jpg",});};return tempList;  };
</script>

注意:如果使用了showListIndex,則觸發onReachBottom觸底事件時,一定要調用refreshList()方法來刷新視圖,mlListRef.value.refreshList();

props

屬性名類型默認值可選值說明是否必填
columnNumber21列表顯示列表數,1-單列表,2-雙列表
imageWidthString--列表中圖片展示的寬度
showMoreBooleantruefalse是否顯示 loadMore 加載更多組件
maxLinesNumber2 | 4-文本展示行數,超出指定行數則顯示…
noMoreBooleanfalsetrue是否沒有更多數據,默認false,當為 true時,不再觸發 loadMore 去加載數據
itemSlotBooleanfalsetrue是否使用自定義插槽,默認false,當為true時,默認組件將不在展示
stytleObject{}-自定義樣式,需要使用 Object 的形式
listArray[]-數據列表
showListIndexNumber0-懶加載機制,可視界面下渲染的列表數量,用于優化 大量數據下的列表渲染,提高性能,注意,使用showListIndex時一定要調用refreshList()方法刷新整個視圖,否則后面的數據將不會展示

list[option]【組件配置項】

屬性名類型默認值可選值說明是否必填
titleString--名稱
urlString--圖片
Any--其他自定義參數,點擊后盡數返回-

事件 Events

事件名返回參數說明
@rowClick(row, index)當點擊了列表時,觸發該rowClick事件,并返回當前點擊的數據和索引
@loadMore--(過時,后續將剔除)推薦使用onReachBottom來自定義觸底加載更多
@refresh--(過時,后續將剔除)推薦使用onPullDownRefresh來自定義刷新事件

組件方法 methods

方法名參數說明
stopRefresh--(過時,后續將剔除)
。。。。。。--

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/36573.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/36573.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/36573.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

秋招突擊——6/26~6/27——復習{二維背包問題——寵物小精靈之收服}——新作{串聯所有單詞的字串}

文章目錄 引言復習二維背包問題——寵物小精靈之收服個人實現重大問題 滾動數組優化實現 新作串聯所有單詞的字串個人實現參考實現 總結 引言 今天應該是舟車勞頓的一天&#xff0c;頭一次在機場刷題&#xff0c;不學習新的東西了&#xff0c;就復習一些之前學習的算法了。 復…

百度Apollo的PublicRoadPlanner一些移植Ros2-foxy的思路(持續更新)

如今的PublicRoadPlanner就是之前耳熟能詳的EM planner 計劃 —— ROS2與CARLA聯合仿真 結構化場景: 規劃算法:EM-planner 控制算法:MPC和PID 非結構化場景: 規劃算法采用Hybrid A* (1)小車模型搭建(計劃參考Github上Hybrid上的黑車,比較炫酷) (2)車輛里程計: 位…

深入比較:Batch文件與Shell腳本的異同

在操作系統中&#xff0c;自動化腳本是一種常見的工具&#xff0c;用于執行一系列自動化命令或程序。Windows和類Unix系統都提供了各自的腳本解決方案&#xff1a;Batch文件&#xff08;在Windows中&#xff09;和Shell腳本&#xff08;在類Unix系統中&#xff09;。本文將詳細…

有哪些方法可以恢復ios15不小心刪除的照片?

ios15怎么恢復刪除的照片&#xff1f;在手機相冊里意外刪除了重要的照片&#xff1f;別擔心&#xff01;本文將為你介紹如何在iOS 15系統中恢復已刪除的照片。無需專業知識&#xff0c;只需要按照以下步驟操作&#xff0c;你就能輕松找回寶貴的回憶。 一、從iCloud云端恢復刪除…

SRC公益上分的小技巧一

前言 之前發布的文章&#xff0c;例如SRC中的一些信息收集姿勢- Track 知識社區 - 掌控安全在線教育 - Powered by 掌控者 里面就有提到若依系統&#xff0c;默認賬號密碼非常簡單 是 admin / admin123 但是&#xff0c;往往我們去挖掘的時候很容易出現 這說明了若依系統的門…

Viewer.js 圖片預覽插件使用

參考&#xff1a;Viewer.js 圖片預覽插件使用 demo鏈接&#xff1a;viewerjs_demo

【Linux:文件描述符】

文件描述符&#xff1a; 文件描述符的分配原則&#xff1a;最小未分配原則 每一個進程中有一個task_struct結構體&#xff08;PCB)&#xff0c;而task_struct中含有struct file_sturct*file的指針&#xff0c;該指針指向了一個struct files_struct的結構體該結構體中含有一個f…

PHP框架詳解- symfony框架

Symfony框架是一個開源的PHP框架&#xff0c;由SensioLabs公司開發并維護&#xff0c;最早發布于2005年。它旨在為Web應用程序的開發提供一個高效且結構化的環境。Symfony框架的設計理念是減少Web應用程序的創建和維護時間&#xff0c;并避免重復性任務。 Symfony框架采用MVC&…

PG最大連接數

在 PostgreSQL 數據庫中&#xff0c;您可以使用 SQL 查詢來獲取最大連接數、當前連接數以及每個數據庫的連接數。以下是一些常用的查詢&#xff1a; 查看最大連接數&#xff1a; PostgreSQL 的最大連接數由配置參數 max_connections 決定。您可以在 postgresql.conf 文件中設置…

使用IMAP服務獲取163郵箱的未讀郵件

使用IMAP服務獲取163郵箱的未讀郵件 整體的邏輯思路如下&#xff1a; 開啟163郵箱的IMAP服務&#xff0c;拿到授權碼用于登錄IMAP服務登錄IMAP服務&#xff0c;獲取郵箱的未讀郵件列表遍歷未讀郵件列表&#xff0c;獲取郵件內容 # 導入必要的庫 import os import imaplib im…

三大工作流引擎技術Activiti、Flowable、Camunda選型指南

文章目錄 前言1 流程引擎發展歷程2 流程引擎主要概念BPM (Business Process Management)BPMN (Business Process Model and Notation)CMMN (Case Management Model and Notation)DMN (Decision Model and Notation)事件&#xff08;Event&#xff09;順序流&#xff08;Sequenc…

從靜電到浪涌,全面防護:雷卯多電壓等級電源保護設計方案匯總

在當今數字化、電氣化日益加速的時代&#xff0c;電子設備和電力系統面臨著前所未有的挑戰&#xff0c;其中靜電放電(ESD)、浪涌以及雷擊等瞬態事件成為了威脅設備穩定性和壽命的關鍵因素。從精密的消費電子產品到工業級控制系統&#xff0c;從智能家居到新能源汽車&#xff0c…

區塊鏈技術的核心要素:共識機制、加密技術與分布式賬本

區塊鏈聽起來像個非常高大上的技術&#xff0c;其實它的核心原理并不難理解。今天我們要聊的就是區塊鏈的三個核心要素&#xff1a;共識機制、加密技術和分布式賬本。想象一下區塊鏈是一個巨大的數字筆記本&#xff0c;我們要弄清楚大家如何共同寫這個筆記本&#xff0c;又如何…

用一個實例看如何分享大量照片 續篇二,關于Exif (Exchangeable Image File) - 可交換圖像文件

續篇二&#xff1a;說說關于照片隱含的 Exif (Exchangeable Image File) 可交換圖像文件 數碼照片的Exif 參數有很多&#xff0c;重要的Exif信息&#xff1a;拍攝日期、時間、拍攝器材、GPS信息。 當然這主要對自己的檔案有意義&#xff0c;如果放到網上還是建議抹去這些信息。…

Bad owner or permissions on C:\\Users\\username/.ssh/config > 過程試圖寫入的管道不存在。

使用windows連接遠程服務器出現Bad owner or permissions 錯誤 問題&#xff1a; 需要修復文件權限 SSH 配置文件應具有受限權限以防止未經授權的訪問 確保只有用戶對該.ssh/config文件具有讀取權限 解決方案&#xff1a; 在windows下打開命令行&#xff0c;通過以下命令打開文…

C++編程(四)this指針 常函數 常對象 靜態成員

文章目錄 一、this指針&#xff08;一&#xff09;概念&#xff08;二&#xff09;顯式使用this指針的場景1. 當形參和成員變量名一致時2. 返回對象自身的時候必須要使用this指針3. 在類中銷毀一個對象 二、常函數和常對象&#xff08;一&#xff09;常函數1. 概念2. 語法格式 …

python OpenCV 庫中的 cv2.Canny() 函數來對圖像進行邊緣檢測,并顯示檢測到的邊緣特征

import cv2# 加載圖像 image cv2.imread(4.png)# 使用 Canny 邊緣檢測算法提取邊緣特征 edges cv2.Canny(image, 100, 200)# 顯示邊緣特征 cv2.imshow(Edges, edges) cv2.waitKey(0) cv2.destroyAllWindows() 代碼解析&#xff1a; 導入 OpenCV 庫&#xff1a; import cv2加…

【MFC】socket通信代碼解析

目錄 一、在MFC中使用Winsock進行socket編程 1.1 包含必要的頭文件 1.2 初始化Winsock 1.3創建socket 1.4 綁定socket 1.5 監聽連接(對于服務器) 1.6 建立連接(對于客戶端) 1.7 發送和接收數據 1.8. 關閉socket 1.9 錯誤處理 1.10 MFC集成 二、MFC中Socke…

PT100(RTD)是什么?2線,3線,4線原理

RTDs - or Resistance Temperature Detectors- (電阻式溫度探測器)&#xff0c;是溫度型傳感器&#xff0c;包含一個電阻&#xff0c;這個阻值可以隨溫度的變化而變化。在工業的進程中和實驗室里已經使用了很多年&#xff0c;以精確&#xff0c;可靠和穩定的特性。 2線制 2線制…

解決Ucharts在小程序上的層級過高問題

<qiun-wx-ucharts canvas2d"{{true}}" type"pie" opts"{{rectificationRateOpts}}" chartData"{{rectificationRateData}}" /> 開啟2d渲染即可解決&#xff08;在小程序開發工具上看著層級還是高&#xff0c;但是在手機上是正常…