vue入门案例

最近在学vue.js,看了官网的教程,然后找了案例来练手,此次案例使用vue2.0+vue-router+axios+ES6语法实现购物车和地址选配功能。这里主要讲下此次案例的流程和一些实现方法,希望对想入门的同学有所帮助。

效果演示:
这里写图片描述

需要用到的知识

vue2.0
vue-router
axios
ES6

一、获取商品列表

此次用到的数据是存储在本地的json格式数据,因为vue-resource已经停止更新,所以这里用到的是axios库。在案例中将axios封装为一个AXIOS类:

export class AXIOS {
  constructor() {
  }
  //获取已授权列表
  get(param) {
    config.data.strSQL = param.param;
    return axios.get(param.api,{},config);
  }
  post(param) {
    config.data.strSQL = param.param;
    return axios.post(param.api,{},config);
  }
  reqSuccess(obj,msg){}

  reqFail(obj,msg){}
}
export default AXIOS;

请求配置文件为config.js文件,具体配置可以参考axios
文档里面的请求配置给出的详细信息

二、定义所需要数据
export default {
   name: 'address',
   data(){               
     return {
       productList: [],       //购物车商品列表
       totalMoney: 0,         //总金额
       checkAllFlag: false,     //是否全选
       delFlag: false,        //是否删除该商品
       curProduct: ''         //要删除的删除的商品
     }
   }
}
三、获取商品列表

配置好axios后,使用axios来获取数据,定义getCartList方法:

getCartList(){           //获取购物车商品列表
   let params = {           //这是axios的参数
       api: 'static/axios/cartData.json',
       param: {}
   };
   ax.get(params)
     .then(res => {
       this.productList = res.data.result.list;
     })
     .catch(err => {
       console.log(err);
     });
},

然后用v-for指令将productList渲染到页面:

<li v-for="item in productList">
四、商品选择和商品数量的改变

使用单选按钮选择商品,定义selectProduct()方法改变按钮的属性以达到改变按钮展示效果:

selectedProduct(product){
  if(typeof product.checked == 'undefined'){
      this.$set(product, "checked", true);
  }else{
      product.checked = !product.checked;
  }
},

selectProduct()方法改变了按钮的class属性,以此达到改变按钮展示效果,

 <a v-bind:class="{'check': item.checked}" @click="selectedProduct(item)"></a>

定义changeQuantity()方法改变商品数量

changeQuantity(product, type){           //改变商品数量
     if(type > 0){
           product.productQuantity++;
       }
       else{
           product.productQuantity>1 ? product.productQuantity--:product.productQuantity=1;
       }
       this.calcTotalMoney();
   }

然后将方法绑定到html元素上:

<a href="javascript:;" @click="changeQuantity(item,-1)">-</a>
<input type="text" :value="item.productQuantity"  disabled>
<a href="javascript:;" @click="changeQuantity(item,1)">+</a>
五、全选、取消全选和商品总额

定义checkAll、calcTotalMoney方法:

checkAll(flag){                     //此方法改变checkAllFlag的值
    this.checkAllFlag = flag;
    this.productList.forEach((product, index) => {
        if(typeof product.checked == 'undefined'){
            this.$set(product, "checked", this.checkAllFlag)
        }else{
            product.checked = this.checkAllFlag;
        }
    });
    this.calcTotalMoney();
},
calcTotalMoney(){             //计算总金额
    this.totalMoney = 0;
    this.productList.forEach((product, index) => {
        if(product.checked){
            this.totalMoney += product.productPrice * product.productQuantity
        }
    });
},

同样绑定到相关html元素上。

还有地址选配功能实现逻辑也是差不多,这里就不再赘述。

源码地址

源码
原始代码
教学视频

代源码中有详细的注释,直接看代码也可以,如果觉得还可以,欢迎star。
原始代码是没有添加vue代码的,可以自己实现vue代码以此来练习vue。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值