Vue速成day06--美团案例的设计与实现

1、项目分析及创建项目

在这里插入图片描述
vue init webpack meituan

2、清空工作

1、删除了assets
2、删除了components文件夹下的helloworld
3、删除了router文件夹下index.js中的关于helloworld的引入和路由注册信息
4、初始了app.vue

3、配置目录

-src
    -assets 静态资源
        -css    .css
        -js     .js
        -img    图片
    -common 公共组件
    -components 拼接页面的组件
    -page 路由组件
    -filter 过滤器
    -router 路由
     index.js 路由规则
    -util 工具类
    App.vue 根组件
    main.js 入口文件

4、重置样式和rem

1、创建assets/css/reset.css
2、创建assets/js/rem.js
3、在main.js中引入

// 引入reset.css和rem.js
import "./assets/css/reset.css"
import "./assets/js/rem.js"

4、vscode下载插件"px to rem",到设置->搜索px to rem,将最后一栏改成100。alt+z这个快捷键可以实现px与rem之间的转换

5、配置一级路由信息

1、在page下创建了相关组件login、index、movie、movieDetail、food、foodDetail
2、在App.vue中定义了路由出口

 <!-- 路由出口 -->
 <router-view></router-view>

3、在router/index.js定义路由规则

routes: [
    {
      path:"/login",
      component:login
    },
    {
      path:"/index",
      component:index
    },
    {
      path:"/movie",
      component:movie
    },
    {
      path:"/movieDetail",
      component:movieDetail
    },
    {
      path:"/food",
      component:food
    },
    {
      path:"/foodDetail",
      component:foodDetail
    },
    {
      path:"*",
      redirect: "/login"
    }
  ]

6、login.vue

<div>
  <h2>登录</h2>
  <div>
    账号:<input type="text">
  </div>
  <div>
    密码:<input type="text">
  </div>
  <button>登录</button>
  <router-link to="/index">去大首页</router-link>
</div>

7、index.vue

1、设置了footer的css样式
2、定义了二级路由出口

    <!-- 二级路由出口 -->
    <router-view></router-view>

3、在components下创建了相关组件home、order、mine
4、配置二级路由规则

{
  path:"/index",
  component:index,
  children:[
    {
      path:"home",
      component:home
    },
    {
      path:"order",
      component:order
    },
    {
      path:"mine",
      component:mine
    },
    {
      path:"",
      redirect: "home"
    }
  ]
}

5、实现底部导航、加选中的样式

<footer>
  <router-link to="/index/home" active-class="active">首页</router-link>
  <router-link to="/index/order" active-class="active">订单</router-link>
  <router-link to="/index/mine" active-class="active">我的</router-link>
</footer>

8、导航

1、router-link

点击完成跳转,如果有条件判断的话就不能使用router-link

2、编程式导航
this.$router.push()    添加一条新的历史记录
this.$router.replace()    用新的历史记录替换当前历史记录
this.$router.go()   要返回几层页面

9、封装全局组件

1、在common/index.js中整合所有的组件
import vBack from "../common/vBack"
import vSearch from "../common/vSearch"
export default{
  vBack:vBack,
  vSearch
}

2、在main.js中,for循环注册相关的组件
import commonComponents from "./common/index"
for(let key in commonComponents){
  Vue.component(key,commonComponents[key])
}

10、movie.vue

1、模拟数据

 movies: [{
     id: 1,
     name: '我和我的祖国',
     price: 58.8
   },
   {
     id: 2,
     name: '我和我的家乡',
     price: 39.0
   },
   {
     id: 3,
     name: '大话西游',
     price: 22.2
   }
 ]

2、遍历数据渲染页面

 <!-- 传参1 -->
 <ul>
   <li class="item" is="router-link" :to="'/movieDetail?id='+item.id" v-for="item in movies" :key="item.id">
     <p>名称:{{item.name}}</p>
     <p>价格:{{item.price}}</p>
   </li>
 </ul>
 <hr>
 <!-- 传参2 -->
 <ul>
   <li class="item1" v-for="item in movies" :key="item.id" @click="toMovieDetail(item.id)">
     <p>名称:{{item.name}}</p>
     <p>价格:{{item.price}}</p>
   </li>
 </ul>

3、针对于传参二

methods: {
  toMovieDetail(id){
    this.$router.push("/movieDetail?id="+id)
  }
}

4、在movieDetail.vue中接收数据

this.$route.query.id

11、food.vue

1、模拟数据

foods: [{
    foodId: 1,
    name: '麻辣烫',
    price: 15.50
  },
  {
    foodId: 2,
    name: '火锅',
    price: 85.00
  },
  {
    foodId: 3,
    name: '海鲜自助',
    price: 234.50
  }
]

2、遍历数据渲染页面

<ul>
  <li class="item" v-for="item in foods" :key="item.foodId" @click="toFoodDetail(item.foodId)">
    <p>名称:{{item.name}}</p>
    <p>价格:{{item.price | priceFilter}}</p>
  </li>
</ul>

3、页面跳转,并携带外卖的id,采用的是动态路由传参

methods: {
  toFoodDetail(id) {
    this.$router.push("/foodDetail/" + id)
  }
}

4、修改路由规则

{
  path:"/foodDetail/:id",
  component:foodDetail
}

5、在foodDetail中接收数据

this.$route.params.id

12、路由小结

1、$route和$router
$route 是路由信息
$router 是路由对象,用来做路由跳转
2、路由传参
    2.1?传参
    "/foodDetail?id=2&age=77"
    获取参数:this.$route.query.id
    2.2动态路由传参
    "/foodDetail/"+id
    修改规则:{path:"/foodDetail/:id"}
    获取参数:this.$route.params.id

13、封装全局过滤器

1、创建单个过滤器

export default function(price){
  return price.toFixed(2)
}

2、在filter/index.js中整合所有过滤器

import priceFilter from "./priceFilter"

export default {
  priceFilter:priceFilter
}

3、在main.js中引入,统一处理

import filters from "./filter/index"
for(let key in filters){
  Vue.filter(key,filters[key])
}

14、animate.css

1、安装

npm i animate.css --save

2、在main.js中引入

import "animate.css"

3、使用

<transition enter-active-class="animate__animated animate__bounceInDown">
  <router-view></router-view>
</transition>

15、生命周期

切换路由的时候,会触发生命周期的执行。例如:离开"/index/home",进入"/index/order",那么home组件会触发销毁,order会触发创建和挂载

16、字体图标

1、在阿里矢量图标库下载你想要的的图标
2、将iconfont.css放入assets/css文件夹中
3、将一些字体文件放入到assets/fonts文件夹中
4、因为路径的变化,修改iconfont.css里面的引入文件路径
5、在main.js中引入iconfont.css

import "./assets/css/iconfont.css"

6、使用


<i class="iconfont icon-fanhui" @click="$router.go(-1)"></i>
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,539评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,911评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,337评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,723评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,795评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,762评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,742评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,508评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,954评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,247评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,404评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,104评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,736评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,352评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,557评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,371评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,292评论 2 352

推荐阅读更多精彩内容