购物车

vue1.html代码

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Vue 测试实例 - 菜鸟教程(runoob.com)</title>

</head>
<style>
    
</style>
<body>
<div id="app">

<h2>购物车</h2>

<div style="" v-for="(car,index) in shopListArr " >

    <h5>京东自营</h5>
    <div style="background:pink;">

        <div style="float:left;margin-right:20px;">
            <input type="checkbox" :checked="car.checked" v-on:click="selectOne(car)">
            <image style="width:50px;height:50px;" :src="car.shopImage" />
        </div>
        <div style="">
            <div>
                <a>{{car.shopName}}</a>
            </div>
            <div>
                <a style="margin-right:370px;">{{car.shopPrice |moneyFormat(car.shopPrice)}}</a>
                <a>{{car.shopPrice*car.shopNumber |moneyFormat(car.shopPrice*car.shopNumber)}}</a>
            </div>
            <div>
                <span v-on:click="sub(index)">-</span>
                <input style="width:30px;" type="tel" :value="car.shopNumber"/>
                <span style="margin-right:330px;" v-on:click="add(index)">+</span>
                <a>删除</a>
            </div>
        </div>
    </div>

</div>
<input type="checkbox" :checked="checkAll" v-on:click="selectAll(checkAll)"/>合计:{{totalPrice |moneyFormat(totalPrice)}}
<button>去结算</button>

</div>
<script src="vue.min.js"></script>
<script src="vue-resource.js"></script>
<script src="vue1.js"></script>

</body>
</html>

 

vue1.js代码

var vm=new Vue({
    el:"#app",
    data:{
        shopListArr:[],
        checkAll:false,
        totalPrice:0,
    },
    mounted:function(){
        
        this.getLocalData();
        
        

    },
    //过滤器
    filters:{
        moneyFormat:function(money){
            return '¥'+money.toFixed(2);
        }
    },
    methods:{
        //请求数据
        getLocalData:function(){

                this.$http.post("car.json").then(function(res){

                    var ress=eval('('+res.bodyText+')');
                    console.log(ress.allShops.shopList);

                        this.shopListArr=ress.allShops.shopList;
                
                },function(){
                    alert("链接失败");
                });
            },
            //加数量
        add:function(index){
            this.shopListArr[index].shopNumber+=1;
            this.Price();
        },
        //减数量
        sub:function(index){
            if(this.shopListArr[index].shopNumber>1){
                this.shopListArr[index].shopNumber-=1;
            }
            this.Price();
            
        },
        //全选框
        selectAll:function(flag){
            this.checkAll=!flag;
            this.shopListArr.forEach(function(value,index){
                if(typeof value.checked==='undefind'){
                    this.$set(value,'checked',!flage);
                }else{
                    value.checked=!flag;
                }
            });
            this.Price();
            
        },
        //控制单选按钮
        selectOne:function(car){
            
                if(typeof car.checked==='undefind'){
                    this.$set(value,'checked',true)
                }else{
                    car.checked=!car.checked;
                }
                
            
            this.Price();
            this.hasSelectAll();
        },
        //判断单选框是否全部选中
        hasSelectAll:function(){
            var flag=true;
            this.shopListArr.forEach(function(value,index){
                if(!value.checked){
                    flag=false;
                }
            });
            this.checkAll=flag;
        },
        //计算总价
        Price:function(){
            var all=0;
            this.shopListArr.forEach(function(value,index){

                    if(value.checked==true){
                        all+=parseFloat(value.shopPrice)*parseFloat(value.shopNumber);
                    }
                    
                    
                    
                
            });
            
            this.totalPrice=all;
            
        }

    }

})

car.json数据

{
    "allShops":{
        "totalMoney":0,
        "shopList":[
            {    
                "shopId":"1001",
                "shopName":"【京东joy联名款】小胜儿童智能机器人早教语音对话聊天声控音乐故事机远",
                "shopPrice":698.00,
                "shopNumber":1,
                "shopImage":"car.jpg"
                
            },
            {    
                "shopId":"1002",
                "shopName":"dostyle DM210 21.5英寸LED背光全高清纤薄显示器(原装广视角VA面板 ",
                "shopPrice":579.00,
                "shopNumber":1,
                "shopImage":"car2.jpg"
                
            },
            {    
                "shopId":"1002",
                "shopName":"德芙Dove巧克力分享碗装 什锦牛奶榛仁葡萄干巧克力糖果巧克力",
                "shopPrice":29.90,
                "shopNumber":1,
                "shopImage":"car3.jpg"
                
            },
        ]
    }
    
}所以的图片都放在代码所放的文件,

所遇问题:

1.刚开始总是报错this.$http.post说是没有get方法。

    解决方案:将vue代码与页面代码分离,以引入的方式运行就没有报错,我猜想原因是vue-resource文件没有在this.$http.post运行之前载入页面导致的,有更好的解释的同学,欢迎 提出你的见解,

2.在刚开始的时候我用的是response=>{}会对这个“>”符号报错,我猜想是版本或是浏览器的原因,具体是什么原因,我并不是很了解。

解决方案:将上面的代码换成function(response){},代码就可以正常运行了。

3.按照别人返回的数据中可以知道res.body返回的是数组,但是我返回的确是一个null,具体原因未找到。但是可以 用其他方式代替。

解决方案:res.bodyText返回的是一个json格式的数据,利用eval('('+res.bodyText+')')将其转变为数组格式,进行数据处理。

4.变量和属性名大小写错误,导致的计算总价出错。改过来就好了,(人太蠢了,哈哈哈哈)

转载于:https://my.oschina.net/u/3786589/blog/1787333

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值