本文目录

  • 前言:
  • 1.具体样式
  • 2.实现的具体功能和代码思路
  • 3.element ui具体样式的网址
  • 4.相关代码
  • 5.总结:

前言:

  • 本文给大家讲的是美食杰项目中菜谱大全项目的具体样式,代码思路和具体代码,希望能帮助到你

1.具体样式

2.实现的具体功能和代码思路

1.头部:根据tab切换筛选点击哪个选中哪个,并将其筛选结果传进路由,根据传进路由的数据进行筛选渲染
tab切换的具体样式是根据element ui里面的具体代码实现
2.左侧:左侧也是筛选条件,点击哪个选中那个并将数据传进路由,根据传进路由的数据进行筛选渲染,具体
样式也是element ui里面的代码实现的
3.右侧:右侧是跟剧筛选数据传给接口接口返回给我的数据,具体样式是根据封装的组件来实现的
并且伴有加载样式也是element ui里面的具体代码
4.右下角:具体样式是根据element ui里面的相关代码实现的,具体功能的实现element ui官网讲解的也很详细

3.element ui具体样式的网址

  • 头部:tab切换 https://element.eleme.cn/#/zh-CN/component/tabs
  • 左侧:Collapse折叠 https://element.eleme.cn/#/zh-CN/component/collapse
  • 加载:loading https://element.eleme.cn/#/zh-CN/component/loading
  • 右下角 :分页 https://element.eleme.cn/#/zh-CN/component/pagination

4.相关代码

<template><div class="box"><!-- top --><el-tabsv-model="classifyName"type="card"@tab-click="handleClick"class="el-tabs"><el-tab-panev-for="item in list":key="item.parent_type":label="item.parent_name":name="item.parent_type"class="el-tab-pane"><div><router-linkv-for="option in item.list":key="option.type":to="{query: { ...$route.query, classify: option.type, page: 1 },}":class="{ active: option.type === classifyType }">{{ option.name }}</router-link></div></el-tab-pane></el-tabs><!-- left --><p class="title">家常好味道,给你家一般的温暖</p><div class="left"><el-collapse v-model="activeNames"><h4>筛选</h4><el-collapse-itemv-for="item in property":key="item.parent_type":title="item.parent_name":name="item.parent_type"><div><spantype="info"v-for="option in item.list":key="option.type":class="{ active: activeType[option.title] == option.type }"@click="selectedTag(option)">{{ option.name }}</span></div></el-collapse-item></el-collapse></div><div class="right roll"><div class="menu-empty" v-show="loading">暂时没有过滤出菜谱信息,请选择其他的筛选条件</div><Roll :menus="menus" :id="170"></Roll></div><div class="block"><el-paginationlayout="total,prev, pager, next":total="total":page-size="page_size":current-page.sync="page"@size-change="handleCurrentChange"@current-change="handleCurrentChange"@prev-click="handleCurrentChange"@next-click="handleCurrentChange"hide-on-single-page="true"></el-pagination></div></div>
</template><script>
import Roll from "@/views/home-page/roll.vue";
import { getClassify, getProperty, getMenus } from "@/connector/api";
export default {components: {Roll,},data() {return {// top// 存储分类中的所有数据list: [],// 定义刷新tab时的值(一级路由)classifyName: 1,// tab切换的选中项(二级路由),里面存的谁,谁就是点击项让谁发生改变classifyType: "1-1",// 存储属性的分类,例如:{craft:1-4,flavor=2-1}activeNames: [],// 记录所有的属性分类activeType: {},// 存储属性中的所有数据property: [],// 存储右侧主体menus: [],// 每页显示几个page_size: 0,// 总页数total: 0,// 页数page: 0,// 遮罩层loading: false,};},// 监听事件watch: {// 路由改变时执行$route: {handler() {// 获取路由 query 参数里的 classifyconst { classify } = this.$route.query;// console.log(classify[0]);// 判断是否有内容if (classify) {// 有则把 classify 的值赋值给 classifyType ,第一个值赋值给 classifyNamethis.classifyName = classify[0];this.classifyType = classify;// 调用 getMenus 获取符合条件的菜谱this.getMenus();// 调用 getClassify 获取所有菜谱分类this.getClassify();}},immediate: true,},},// 进入当前页面时执行mounted() {// 给 url 地址添加 query 参数this.$router.push({query: {// 留存...this.$route.query,classify: "1-1",// 如果有值则显示,没有则为 1page: this.page || 1,},});// 获取所有属性分类getProperty().then(({ data }) => {// console.log(data);this.property = data;// 获取所有 query 参数const { query } = this.$route;// reduce 用来迭代一个数组,并且把它累积到一个值中this.activeType = this.property.reduce((o, item) => {// 判断所有属性在 query 中是否存在,存在则赋值,不存在则为空o[item.title] = query[item.title] ? query[item.title] : "";// 判断是否为空if (o[item.title]) {// 不为空则添加至 activeNamesthis.activeNames.push(o[item.title][0]);}// 把值返回给 activeTypereturn o;}, {});});},// 触发时执行methods: {// 获取所有菜谱分类getClassify() {getClassify().then(({ data }) => {this.list = data;// console.log(...this.$route.query);});},// 点击头部(一级路由)时触发handleClick(tab, event) {// console.log(tab.name, event);// tab.name 值为第几个(下标)this.classifyName = Number(tab.name);this.classifyType = tab.name + "-1";// 改变 query 参数// 点击(一级路由)第几个,则选中(二级路由)第一个this.$router.push({...this.$route.query,query: {classify: tab.name + "-1",page: 1,},});},// 点击左侧筛选(二级路由)selectedTag(option) {// option 点击的具体信息// 获取路由中所有 query 参数let query = { ...this.$route.query };// 判断该属性是否选中if (this.activeType[option.title] == option.type) {// 选中则取消选中this.activeType[option.title] = "";delete query[option.title];} else {// 否则选中this.activeType[option.title] = option.type;query[option.title] = option.type;}// 路由也跟着改变this.$router.push({query,});},// 获取右侧数据getMenus() {// 获取路由中所有 query 参数const query = { ...this.$route.query };// 新建一个对象const param = {// 存在则使用,不存在则为一page: query.page || 1,classify: query.classify,};// 让 page 的值,跟随 query 中 page 的值this.page = query.page;// 删除 page 和 classifydelete query.page;delete query.classify;// 判断是否还有值if (Object.keys(query).length) {// 有则添加到 param.propertyparam.property = {...query,};}// 打开遮罩层this.loading = true;// 声明一个变量为空let loading = null;// 在下次 DOM 更新循环结束之后执行延迟回调。在修改数据之后立即使用这个方法,获取更新后的 DOMthis.$nextTick(() => {// element-ui 里的遮罩层loading = this.$loading({target: ".roll",text: "Loading...",spinner: "el-icon-loading",background: "rgba(0, 0, 0, 0.8)",});});// 防止数据重复,list 为空this.list = [];// console.log(param.property);getMenus(param).then(({ data }) => {// console.log(data);// 所有菜谱的属性this.menus = data.list;// 总数this.total = data.total;// 一页多少个this.page_size = data.page_size;// 第几页this.page = data.current_page;// 关闭遮罩层loading.close();// 判断是否有值if (data.list.length) {// 有的话关闭遮罩层this.loading = false;}});},// 点击页数时执行handleCurrentChange(val) {// val:点击的页码// console.log({ ...this.$route.query });// 改变 query 中的页数this.$router.push({query: {...this.$route.query,page: val,},});},},
};
</script>

5.总结:

以上就是 美食杰项目 中 发布菜谱页的具体实现方法,不懂得也可以在评论区里问我或私聊我询问,以后会持续发布一些新的功能,敬请关注。
我的其他文章

美食杰项目(七)菜谱大全相关推荐

  1. vue美食杰项目之菜谱大全实现效果(一)

    目录 recipe.vue 注意:因为用到了element-ui组件,所以需要先安装element-ui组件,进入项目根目录后 执行 npm i element-ui 思路: 1.找到对应的组件进行数 ...

  2. 美食杰项目(菜谱大全)效果介绍

    1.看一下要实现的效果 1.1.    点击实现家常菜谱 中华菜系  各地小吃的tab切换 1.2.   点击各个菜系实现高亮变红选中 1.3    点击工艺 口味 难度 口味下的按钮  右侧的菜品会 ...

  3. 美食杰项目 -- 发布菜谱(七)

    目录 前言: 具体实现思路: 步骤: 1. 展示美食杰发布菜谱页效果 2. 引入element-ui 3. 代码 总结: 前言: 本文给大家讲解,美食杰项目中 实现发布菜谱页的效果,和具体代码. 具体 ...

  4. 美食杰项目 -- 菜谱大全(二)

    目录 前言: 具体实现思路: 步骤: 1. 展示美食杰菜谱大全效果 2. 引入element-ui 3. 代码 总结: 前言: 本文给大家讲解,美食杰项目中菜谱大全实现的效果,和具体代码. 具体实现思 ...

  5. vue——超详细的美食杰项目—菜谱大全

    vue--超详细的美食杰项目-菜谱大全 效果介绍 1.家常菜谱Tab切换: 2.筛选: 效果介绍 下面我们实现的效果就是图一中的.点击'家常菜谱'下的其中一项时背景颜色改变并向路由中显示参数.在点击' ...

  6. 美食杰项目----菜谱大全

    美食杰项目----菜谱大全 实现效果介绍: 点击菜谱tab切换,类似于一个二级菜单 当他点击家常菜切换颜色,当它刷新的时候颜色不会掉 点击工艺,口味切换,也类似于一个二级菜单 当点击"炒&q ...

  7. VUE——超详细的美食杰项目—菜谱详情

    VUE--超详细的美食杰项目-菜谱详情 效果介绍 detail.vue detail-header.vue detail-content.vue comment.vue 效果介绍 实现页面数据渲染,还 ...

  8. 美食杰项目(六)发布菜谱

    目录 前言 具体效果 实现的具体功能 代码思路 主要引入的element ui的具体样式 相关代码 总结: 前言 本节给大家讲的是美食杰项目的发布菜谱的主要功能和具体样式,希望我的代码能够帮助到你,也 ...

  9. 美食杰项目 -- 菜品信息(五)

    目录 前言: 具体实现思路: 步骤: 1. 展示美食杰菜谱大全效果 2. 引入element-ui 3. 代码 总结: 前言: 本文给大家讲解,美食杰项目中 实现菜品信息页的效果,和具体代码. 具体实 ...

最新文章

  1. Android:理想的框架开发母板——高焕堂
  2. 请求和响应向更多内容
  3. bzoj 2178 圆的面积并 —— 辛普森积分
  4. AS3自制按钮通用代码
  5. 单链表的基本操作-查找
  6. 为什么ConcurrentHashMap没有ConcurrentHashSet
  7. Flex中添加大量组件时内存占用问题
  8. [20150803]触发器对dml的影响.txt
  9. Python 列表应用之“简易好友管理系统”
  10. 笨方法学python --习题12
  11. 大批驱动管理软件(免安装版)
  12. 舞蹈工作室舞蹈课程预约小程序开发制作
  13. 还原html默认打开方式,怎么还原打开方式,详细教您Win10系统下如何还原程序默认打开方式...
  14. 外部中断控制LED灯开关
  15. 【愚公系列】2023年06月 网络安全(交通银行杯)-疑惑的汉字
  16. Tableau文件管理
  17. 使用docker创建mysql容器
  18. 阿里云部署K8s及一些排错体会
  19. 网页中常见的元素有哪些
  20. 安卓APP登录忘记密码以及通过邮箱找回密码的实现

热门文章

  1. java编程定义一个表示学生信息的类student_要求如下_用JAVA定义一个学生类Student来表示学生信息,学生类中包含成员有学号(id)、姓名(name)、年龄和成绩...
  2. html picture元素
  3. 市场调研报告-全球与中国设计用3D可视化软件市场现状及未来发展趋势
  4. 把raw里的文件复制到SD卡中
  5. 时尚电商新赛道—FashionAI 技术揭秘
  6. nginx--动态网站
  7. Solidity实现智能合约——宠物进食系统(二)
  8. 第十届山东省ACM程序设计竞赛有感
  9. VIEWGOOD(远古)大科普:直播观看自由掌控的直播时移技术介绍
  10. php有个schost.exe_这个“SVCHOST.EXE”是什么进程?