❤ 项目源码 ❤
GitHub地址:https://github.com/Umbrella001/mtapp

文章目录

  • 一、开始需求分析
    • 1.1 需求分析 >> 模板设计(总体分析)
    • 1.2 需求分析 >> 组件设计(城市服务组件)
      • 1.2.1 topBar 公共组件
      • 1.2.2 searchBar搜索栏
      • 1.2.3 关于侧边导航栏制作
      • 1.2.4 关闭Eslint验证
  • 二、学习笔记

下面使用布局为elementUI:

官方地址: https://element.eleme.cn/#/zh-CN

一、开始需求分析

1.1 需求分析 >> 模板设计(总体分析)

1.2 需求分析 >> 组件设计(城市服务组件)

1.2.1 topBar 公共组件



如上面两个图的请求完成该流程都是发送两个请求才能完成从请求到拿到数据的过程,其中可以使用vuex+ssr来减少一次请求!

埋下三个问题,后续记录!

1.2.2 searchBar搜索栏


布局使用element-ui里的layout布局即可

需求:搜索栏聚焦时出现【热门搜索】,输入内容时自动找数据并且热门搜索变成对应搜索出来的数据面板

1.2.3 关于侧边导航栏制作


这种在淘宝,美团这种侧边栏展示的结构,看似乎很复杂,但是其实只要用简易的DOM结构和合理 数据分析在加上简单逻辑数据双向控制就可以完成;

→ 首先HTML代码(将 [全部分类] 和 [各分类里对应的各自类型] 分为两部分):

<!-- 全部分类部分 -->
<dl class="nav" @mouseleave="mouseleave"><dt>全部分类</dt><dd v-for="(item,index) in menu" :key="index"@mouseenter="enter"><i :class="item.type"/>{{item.name}}<span class="arrow"></span></dd>
</dl>
<!-- 制定分类弹出部分 -->
<div class="detail" v-if="kind"@mouseenter="sover"@mouseleave="sout"><template v-for="(item,index) in curdetail.child"><h4 :key="index">{{ item.title }}</h4><span v-for="v in item.child" :key="v">{{ v }}</span></template>
</div>

总结:这里不难想全部分类部分和之前topBar中nav的制作都是使用建议的dl>dt+dd,而弹出层中的内容又是一个标题和列表的结构,那我们可以使用dl>dt+dd的结构,但是这里可以不用这个啦,直接使用vue中的template扩展槽

→ javascript数据结构的设计也是重中之重:

data(){return{kind:'',menu:[{type:'food',name:'美食',child:[{title:'美食',child:['代金券','甜品饮品','火锅','海底捞']}]},{type:'takeout',name:'外卖',child:[{title:'外卖商铺',child:['美团','饿了吗','火锅','海底捞']}]},{type:'hotel',name:'酒店',child:[{title:'五星级酒店',child:['维也纳','富华','七日酒店','海底捞']}]}

总结:结合html中循环虚拟数据的方式,这里先单独分析,如这种外层全部分类为一个ul-li格式样子的,制定类型内层也是这种类似于ul-li的,数据结构就应该也是嵌套,如代码,menu的child其实就是全部分类的数据类型,其次各自类型内部的child就是各自弹出层的内容数据,child里面的child也就是就是标题里的数据了;

→ javascript逻辑交互设计

// 根据鼠标进入的位置过滤类型,并且拿到该类型下的字段数据
computed:{curdetail:function(){return this.menu.filter((item) => item.type===this.kind)[0]}},
// 根据鼠标进入和移出时完成交互
methods:{mouseleave:function(){let self = this;self._timer = setTimeout(function(){self.kind = ''},100)},enter:function(e){this.kind = e.target.querySelector('i').className;},sover:function(){clearTimeout(this._timer);},sout:function(){this.kind = ''}
}

总结:重点逻辑分为两个,第一如何知道鼠标进入的是那个类型字段 >>> 通过循环在每个制定分类中进行鼠标进入方法,接受事件源event,通过那e内的target拿到对应元素对象即可(后面通过选择器那类不说了…),此时计算属性实时判断fliter内部的逻辑,拿到对应分类的子数据;第二个问题就是当我移出列表时,弹出层就瞬间消失,这里怎么办,简单就是在弹出层同时监听移入和移出的方法,通过定时器延迟解决

1.2.4 关闭Eslint验证

① 解决Vue-cli3中的Eslint检测 https://blog.csdn.net/kevinfan2011/article/details/86577514

② 解决nuxt中的ESlint检测:(主要亲测解决)
仿造上面的博客,去eslintrc.js注释掉@nuxtjs即可

module.exports = {root: true,env: {browser: true,node: true},parserOptions: {parser: 'babel-eslint'},extends: [// '@nuxtjs',  关闭验证'plugin:nuxt/recommended'],// add your custom rules hererules: {'nuxt/no-cjs-in-config': 'off'}
}

③ 网上说的,在nuxt。config.js中找到这个注释掉:

然后记得关闭编译器,然后打开再次跑一次服务npm run dev即可

④ 其实不算是方法,应为当时报编译错误是有这么一次话

所以查了一下,需要在这里加上--fix

二、学习笔记

① 注意总结一下vue/cli前后进行脚手架中搭建的工程如何去关闭eslint语法检查。其中nuxt的关闭eslint的方法是类比vue-cli3.0一样的(可以说nuxt本质上就是需要vue/cli3.0进行搭建),还有一些其他关闭的方法

② 项目中的这些如何使用最精简的dom实现,看代码:

 <ul class="nav"><li class="list"><nuxt-link to="/my">我的美团</nuxt-link><dl><dd><nuxt-link to="/order">我的订单</nuxt-link></dd><dd><nuxt-link to="/order">我的收藏</nuxt-link></dd><dd><nuxt-link to="/order">抵用券</nuxt-link></dd><dd><nuxt-link to="/order">账户设置</nuxt-link></dd></dl></li><li><nuxt-link to="/order">手机APP</nuxt-link></li><li class="list bd"><nuxt-link to="/center">商家中心</nuxt-link><dl><dd><nuxt-link to="/userCenter">登录商家中心</nuxt-link></dd><dd><nuxt-link to="/coop">我想合作</nuxt-link></dd><dd><nuxt-link to="/wap">免费手机开店</nuxt-link></dd><dd><nuxt-link to="/kaipiao">商家申请开票</nuxt-link></dd></dl></li>
</ul>

下拉的哪些dom只需要包在dl>dd里面就能实现,当然css也是关键看 topbar.css 源码

④ 这里刚好遇到一个blur和click先后的问题,当blur和click同时出发是是先blur在click的,这样就会导致当用户搜索完后去点击搜索内容时的瞬间,搜索框就消失了,只要在blur方法执行时加个定时器就行,注意定时器的this是window的,所以要实现存放data中的this指向,或者使用es6的箭头函数即可

⑤ 如何自测数据的双向绑定,不需要验个数据都要创建一个mock,没必要,反正动态的数据你可以使用v-model或者循环去取data中模拟的数组数据即可;

❤ 项目源码 ❤
GitHub地址:https://github.com/Umbrella001/mtapp

美团项目 ---首页开发2相关推荐

  1. Vue全家桶+SSR+Koa2全栈开发美团网⑦——首页开发

    首页header组件开发 pages目录下的index.vue组件页面默认引用layouts目录下的default.vue模板,所以我们在default.vue模板中直接使用element模板 < ...

  2. Vue项目首页-开发周末游组件(7-7)

    开发周末游组件 <template><div><div class="title">周末去哪</div><ul>< ...

  3. Vue项目首页---开发周末游组件

    <template><div><div class="title">周末去哪儿</div><ul><li clas ...

  4. Vue项目supermall仿蘑菇街详解(一)首页开发详解

    前言 本文章是对coderwhy vue项目仿蘑菇街做的一个步骤详解,此文章包含个人详解及主要步骤,由于代码较多较杂,就不放这了,代码大部分就用截图了 一.安装及创建 安装node,vue-cli,创 ...

  5. 【Vue项目】二、去哪儿网APP——首页开发

    首页开发中的重难点 重点思想:页面组件化 页面组件化下的组件引入及使用 flex:1 使用iconfont图标 使用vue-awesome-swiper实现轮播效果 实现带有分页器的轮播 实现有分页效 ...

  6. 【构建】react打造你的第一个Bilibili首页开发项目

    [构建]react打造你的第一个Bilibili首页开发项目 简 介 Hello 小极客们,如果觉得本文还不错,记得点个赞或者给个 star,你们的赞和 star 是我编写更多更丰富开源项目的动力![ ...

  7. 六十五、完成Vue项目去哪儿网App首页开发(来源:慕课网)

    2020/10/21. 周三.今天又是奋斗的一天. @Author:Runsen @Date:2020/10/21 写在前面:我是「Runsen」,热爱技术.热爱开源.热爱编程.技术是开源的.知识是共 ...

  8. 美团App iOS开发与FRP

    版权说明 本文为刊登于<程序员>杂志2016年5月刊.如需转载,请与<程序员>杂志联系. 背景和面临的问题 随着移动互联网的蓬勃发展,iOS App的复杂度呈指数增长.美团·大 ...

  9. shiro教程(4)-shiro与项目集成开发

    1 shiro与项目集成开发 这里我们主要以用户登录的例子来演示,先给出一个时序图: 点击打开链接(点击查看) 1.1 shiro与spring web项目整合 shiro与springweb项目整合 ...

最新文章

  1. 一次 Java 内存泄漏的排查
  2. Node.js 体验-在Windows Azure工作者角色上托管Node.js
  3. 【1024】阿里开源项目汇总
  4. 全局变量、局部变量、静态全局变量、静态局部变量在内存里的区别(转)
  5. 使用mcBackup备份Windows 7 Media Center设置
  6. C#动态生成Word文档并填充数据(二)
  7. 楚留香沧海带什么秘籍比较好 沧海秘籍搭配推荐
  8. java反射加载类_Java反射 - 动态类加载和重载
  9. C语言区分大小写字母
  10. Unity3D编译器汉化
  11. h5页面如何切图_切图与CSS入门
  12. iec61508最新2020_功能安全IEC61508标准新旧版的对比
  13. 计算机二级等级考试ms office用什么软件练习好?
  14. 波浪线html,js中的波浪线符号作用(按位非(~)符号)
  15. Java 实验8 《抽象类与接口》
  16. 力扣417题太平洋大西洋水流问题
  17. 优麒麟 2204 与 win10 双系统安装笔记
  18. 淘宝精准库存接口获取商品ID下所有的sku精准库存
  19. 城市公交线路查询系统mysql_基于Java环境下的城市公交查询系统设计与实现毕业论文+开题报告+答辩PPT+演示视频+设计源码+Mysql文件...
  20. 硬件工程师知识体系(公开版)

热门文章

  1. Excel中让所有图片刚好适应单元格大小,或者让图片也支持排序
  2. 路由器+虚拟服务器+ssh,如何实现用SSH方式登陆路由器管理
  3. {转载}Circos绘图(1)
  4. java画笑脸_java的画图运用。一个简答的笑脸程序☺
  5. Win10版本那么多怎么区别(2)
  6. SQL中数据类型转换
  7. 到底什么是上下文(Context)
  8. 基于VS2017的C++ SuperLU混合编程
  9. win10用账户登录计算机,Win10支持两种账户登录,一种是本地账户,另一种是Microsoft账户...
  10. 【电路理论】2-6 线性电阻电路解答的存在性与惟一性定理