html|美食杰,菜谱大全,loading事件和对应内容显示实现效果(四)
这篇文章是根据上篇文章:美食杰,菜谱大全组件中,零碎的组件实现效果(三)_qianluo111的博客-CSDN博客
续写的效果,这个效果是展示右侧的内容通过最上面的tab切换和左边的侧边栏来实现的。右侧的主体的loading加载和显示内容主体。
文章图片
下面开始讲解一下我们要实现效果的过程啦!
第一步:先实现我们右侧的主体栏的数据。
我们首先要将后端数据获取到,这个就是 import {getMenus} from '@/service/api';
第二步:调用获取到的数据data将其进行解构,看数据请求的数据中有没有参数有参数也要拿过来,保存到我们在新建的空数组list:[]中。 this.list =data.list;
这样就将数据传给了我们的空数组list中。
getMenus(params).then(({data})=>{
// console.log(data);
打印查看一下有没有获取到数据
this.list =data.list;
})
},
第三步:渲染数据,将在list:[ ]中的数据进行渲染由于右侧是一个个的组件,所以我们渲染的是一个组件。还要在data中保存一个总页数total:0,单页数page:1。
暂时没有过滤出菜谱信息,请选择其他的筛选条件
第四步:实现加载loading事件,我们都知道loading事件是在生命周期里挂载之前执行的,所以在调用数据之前要先获取路由参数,然后将请求到的数据params中的page和classify,当页面加载时,下面的分页器随之变动,看数据有几条就显示几个同时分页器展示响应的页数,多余的页数用delete query.page; 删除路由参数页数和delete query.classify中tab切换栏中的页数。在进行判断,当前展示的组件的长度是否于页码相等。然后挂载之前显示this.loading=true; 显示之后清除let loading=null;
getMenuss(){
const query = {...this.$route.query};
const params={
page:query.page || "1",
classify:query.classify
};
delete query.page;
删除多余的页码
delete query.classify删除多余不符合的数据
if (Object.keys(query).length) {//判断组件长度是否于页码长度相等
params.property = {
...query
}
}
this.loading=true;
//挂载之前显示
let loading=null;
//挂载完毕之后消失
}
第五步:挂载之后,挂载完毕之后我们要用到nextTick()方法,在我们下一次获取数据的时候需要执行延迟回调。
this.$nextTick(()=>{
loading=this.$loading({//这是我们加载loading时间是要实现的
target:'.filter-menus-box',//找到我们的事件源,也就是我们要有遮盖层的部分,记得class类名的点不能少
text:'Loading...',加载时显示的文本
spinner:'el-icon-loading',//展示转圈圈的图标
background:'rgba(0,0,0,0.7)'//背景颜色的改变
})
});
this.list=[];
//挂载之后将list数据存储展示
第六步:展示过程,当loading加载前数据不显示,加载完成后在显示。
getMenus(params).then(({data})=>{
if (this.loading) {
loading.close();
//数据加载之后将loading事件进行关闭
}
this.loading=false;
// console.log(data);
this.list =data.list;
this.total =data.total;
this.page=data.current_page;
//当前组件赋值给页码
})
第七步:是页码的实现,点击改变当前页码。通过写一个方法,当点击左侧栏或tab切换栏时监听路由并添加响应的内容。
handlerSelect(){
console.log("改变页码");
this.$router.push({通过路由添加相应的页码和路由参数
query:{
...this.$route.query,
page:this.page
}
})
},
第八步:也就是tab切换一二级路由是展示的内容。先将classify中的数据赋值给一个空变量中存起来,然后找到classify中相应的数据。根据路由添加响应的内容。
tabClick(){
const classifName=this.classifyName;
//将classifyName定义刷新的tab值赋值给一个空变量
const item=this.classify.find(item => item.parent_type === classifName);
//找到classify中的数据存储在item中
// console.log(item);
//item 是当前被点击到的一级路由(整体数据)
if (item) {
this.classifyName=item.parent_type//一级路由
this.classifyType=item.list[0].type
this.$route.push({
query:{
...this.$route.query,
classify:this.classifyType
}
})
}
}
这样就实现了我们想要的效果。本片文章主要是讲解了,显示主体,分页器,遮罩层,这些效果运用了element-ui组件,不会使用这个组件的可以去看一下饿了么组件库的官网哦!
这里我把组件库官网的链接拿到了,省了你们去搜索的时间。组件 | Element
文章图片
文章图片
【html|美食杰,菜谱大全,loading事件和对应内容显示实现效果(四)】
推荐阅读
- 眼观耳听美食的日子
- django-前后端交互
- 爬虫数据处理HTML转义字符
- 经院陈杰NO.7讲座笔记
- HTML基础--基本概念--跟着李南江学编程
- 大家来欣赏一下能吸引“仙人”的传统美食“镇江肴肉”
- 成都一年吃掉700亿|成都一年吃掉700亿 这五大类美食最为吸金
- 巴塞罗那之旅小记(二)---|巴塞罗那之旅小记(二)--- 上帝之手的杰作圣家堂
- 3.css浮动
- 杰克·韦尔奇卸任演讲(决定企业未来的10个经营原则)