vue2.0 饿了么项目总结

项目启动

1.node.js配置安装

2.Vue-cli脚手架安装

3.了解webpack,之后会通过package.json安装资源。

4.制作iconmoon.com制作字体图标文件,导入resource文件,了解项目结构

5.mock数据

  因为vue2取消了dev-client.js和dev-server.js,替换成webpack-dev-conf.js。因此在这里踩下了Vue2的第一个大坑。

  正确的mock姿势:

//第一步,在const portfinder = //require(‘portfinder’)后添加
const express = require('express')
const app = express()//请求server
var appData = require('../data.json')//加载本地数据文件
var seller = appData.seller//获取对应的本地数据
var goods = appData.goods
var ratings = appData.ratings
var apiRoutes = express.Router()
app.use('/api', apiRoutes)//通过路由请求数据
 //第二步找到devServer,在里面添加一个before()
before(app) {
  app.get('/api/seller', (req, res) => {
    res.json({
      errno: 0,
      data: seller
    })//接口返回json数据,上面配置的数据seller就赋值给data请求后调用
  }),
  app.get('/api/goods', (req, res) => {
    res.json({
      errno: 0,
      data: goods
    })
  }),
  app.get('/api/ratings', (req, res) => {
    res.json({
      errno: 0,
      data: ratings
    })
  })
}

完成这一步呈现的效果就是能通过localhost:8080/api/goods等url访问到相应页面。

到此为止, 只要在cmd里输入npm run dev不报错,并且能够在浏览器上访问到相应url的界面就算大功告成了。可以进入下一个步骤。

外部组件

主要用到的app.vue和main.js

app.vue作为页面上第一个被挂载上的程序,主要负责初始化一些数据和app头部导航的功能。template部分负责页面html部分,script负责页面js部分,style负责页面css,我们使用的是es6 和stylus,所以注意在头部引入相关信息。导入模块的方式也有点容易混淆,也是我入的第二个大坑

<script type="text/ecmascript-6">
    import header from './components/header/header.vue';
//导入js时不需要@,并且可以在webpackage.base.conf.js的resolve.alias配置关键字导入目录,比如'components': path.resolve(__dirname, '../src/components')


<style lang="stylus" rel="stylesheet/stylus">
@import './common/stylus/mixin.styl'
//导入style时需要@

main.js文件用来配置app.vue和index页面的挂载以及相关路由。vue-router的配置方式从1.0到2版本有比较大的更改,当初在这里也卡了一段时间,幸好网上这方面的信息挺多,还算比较好解决。

vue-resource:这个插件也比较简单,注意返回必须是json.body才是object对象。

 created() {
          this.$http.get('/api/seller').then((response) => {
             let response = response.body;
            // 判断errno是否为0
             if (response.data.errno === ERR_OK) {
               this.seller = response.data;
             }
          });
        },

header组件

                                                                                                                                                        ...tobe continue

项目为外卖App核心的商家模块的SPA,包括商品、评论、商家介绍、购物车等多个子模块,使用Vuejs全家桶+ES6+Webpack等前端最新最热的技术,采用模块化、组件化、工程化的模式开发; 显示/隐藏优惠和公告详情 <template> <div class="header"> <div class="content-wrapper"> <div class="avatar"> <img width="64" height="64"src="seller.avatar"> </div> <div class="content"> <div class="title"> <span class="brand"></span> <span class="name">{{seller.name}}</span> </div> <div class="description"> {{seller.description}}/{{seller.deliveryTime}}分钟到达 </div> <div class="support" v-if="seller.supports"> <span class="icon" :class="classMap[seller.supports[0].type]"></span> <span class="text">{{seller.supports[0].description}}</span> </div> </div> <div class="supports_count" v-if="seller.supports" @click="showDetail(true)"> <span class="count">{{seller.supports.length}}个</span> <span class="icon-keyboard_arrow_right"></span> </div> </div> <div class="bulletin-wrapper" @click="showDetail(true)"> <span class="bulletin-title"></span> <span class="bulletin-text">{{seller.bulletin}}</span> <i class="icon-keyboard_arrow_right"></i> </div> <div class="background"> <img width="100%" height="100%"src="seller.avatar"> </div> <div class="detail" v-show="detailShow"> <div class="detail-wrapper"> <div class="detail-main clearfix"> <div class="name">{{seller.name}}</div> <div class="star-wrapper">star组件内容</div> <div class="title"> <div class="line"></div> <div class="text">优惠信息</div> <div class="line"></div> </div> <ul class="supports" v-if="seller.supports"> <li class="support" v-for="item in seller.supports"> <span class="icon" :class="classMap[item.type]"></span> <span class="text">{{item.description}}</span> </li> </ul> <div class="title"> <div class="line"></div> <div class="text">商家公告</div> <div class="line"></div> </div> <div class="content"> <p>{{seller.bulletin}}</p> </div> </div> </div> <div class="detail-close" @click="showDetail(false)"> <span class="icon-close"></span> </div> </div> </div> </template> [removed] export default{ props: { seller: { type: Object } }, data () { return { detailShow: false } }, created () { this.classMap = ["decrease", "discount", "guarantee", "invoice", "special"] }, methods: { showDetail (isShow) { this.detailShow = isShow } } } [removed]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值