Element Plus的loading加载,再js中直接调用的封装

在src目录下的plugins文件夹创建了loading.js,导入了Element-Plus的加载组件。定义了开始和结束加载的函数,以及显示和隐藏加载效果的方法。在Hello.vue页面中引入并使用这些方法来控制加载状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我是在src目录下新建了一个plugins文件夹,再这个文件夹里面新建一个loading.js文件,

文件里面的内容如下:

import { ElLoading} from 'element-plus'
 
let loadingCount = 0;
let loading;
 
const startLoading = () => {
  loading = ElLoading.service({
    lock: true,
    text: '加载中……',
    background: 'rgba(0, 0, 0, 0.1)'
  });
};
 
const endLoading = () => {
  loading.close();
};
 
export const showLoading = () => {
  if (loadingCount === 0) {
    startLoading();
  }
  loadingCount += 1;
};
 
export const hideLoading = () => {
  if (loadingCount <= 0) {
    return;
  }
  loadingCount -= 1;
  if (loadingCount === 0) {
    endLoading();
  }
}

再需要加载效果的地方,引入这个文件的方法即可,例如再一个Hellow.vue页面

import { showLoading, hideLoading } from '@/plugins/loading' //自封装loading加载效果引入



showLoading();//打开加载中

hideLoading();//关闭加载中
       

### 使用 Element Plus 实现带有分页和搜索功能的自定义下拉框组件 为了创建一个既具备分页又拥有搜索能力的 `el-select` 组件,可以采用组合式 API 的方式来增强原有的选择器。这不仅能够解决当选项数量庞大时性能下降的问题,还能提供更好的用户体验。 #### 1. 创建基础结构 首先引入必要的依赖项并初始化项目: ```javascript import { defineComponent, ref, watch } from 'vue'; import { ElSelect, ElOption, ElInput } from 'element-plus'; export default defineComponent({ components: { ElSelect, ElOption, ElInput, }, }); ``` #### 2. 添加状态管理 接着设置响应式的属性用于控制页面切换以及过滤条件: ```javascript const currentPage = ref(1); const pageSize = ref(10); // 每页显示条目数 const searchQuery = ref(''); // 用户输入的关键字查询字符串 const options = ref([]); // 当前可见的数据列表 const totalItems = ref(0); // 总记录数 ``` #### 3. 处理数据获取逻辑 编写异步函数负责从服务器端请求分页后的数据集,并更新本地存储的状态变量: ```javascript async function fetchOptions() { try { const response = await axios.get('/api/options', { params: { page: currentPage.value, size: pageSize.value, q: searchQuery.value.trim(), } }); if (response.data && Array.isArray(response.data.items)) { options.value = response.data.items; totalItems.value = response.data.total || 0; } } catch(error) { console.error("Failed to load options", error); } } ``` 每当用户改变当前页码或是修改了筛选条件时都应该重新调用此方法刷新视图中的内容[^2]。 #### 4. 构建模板部分 最后一步是在 HTML 结构里加入相应的标记语言描述界面布局: ```html <template> <div class="custom-select-container"> <!-- 输入框 --> <ElInput v-model="searchQuery" placeholder="请输入关键字..." @input="handleSearch"></ElInput> <!-- 下拉菜单 --> <ElSelect :loading="isLoading" filterable remote clearable reserve-keyword :remote-method="fetchOptions" style="width: 100%;"> <!-- 动态渲染option标签 --> <ElOption v-for="(item,index) in options" :key="index" :label="item.label" :value="item.value"/> <!-- 如果还有更多,则添加加载更多的按钮 --> <li slot="empty" v-if="totalItems > currentPage * pageSize" class="load-more-button" @click.stop.prevent="loadMore">点击加载更多</li> </ElSelect> </div> </template> ``` 这里特别需要注意的是 `slot="empty"` 属性的应用场景——它会在没有任何匹配项的情况下被触发;而通过监听其上的点击事件则可实现懒加载效果[^4]。 #### 5. 完善交互细节 还需补充一些辅助性的处理程序以完善整体行为模式: ```javascript function handleSearch(queryString) { currentPage.value = 1; // 搜索重置回到第一页 searchString.value = queryString; } // 加载更多 function loadMore(){ ++currentPage.value; fetchOptions(); } ``` 以上便是利用 Element Plus 库构建了一个支持分页与实时检索特性的高级版 `<el-select>` 控件的大致过程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值