Vue组件实现购物车效果

效果图:
购物车是table做的,是一个响应式的购物车

QQ截图20180918153437.png

body:

<div id="app">
    <!--我们在写代码或者效果时很容易忘记这个自定义组件名-->
   <my-component></my-component>
</div>

js:

<script>
    var model=Vue.component('my-component',{
        template:
        `
            <div>
               <ttable v-bind:number='arr'></ttable>
            </div>
        `,
        data:function(){
            return{
                arr:[
                    {number:1,mc:'apple',dj:14,num:1},
                    {number:2,mc:'banana',dj:8,num:1},
                    {number:3,mc:'orange',dj:3,num:1}
                ]
            }
        }
    })
    
    Vue.component('ttable',{
        props:['number'],
        template:
        `
            <div class='container'>
                <table class='table table-bordered text-center'>
                    <thead>
                        <tr>
                            <th class='text-center'>编号</th>
                            <th class='text-center'>名称</th>
                            <th class='text-center'>单价</th>
                            <th class='text-center'>数量</th>
                            <th class='text-center'>小计</th>
                        </tr>
                    </thead>
                    <tbody>
                        <tr v-for='(value,index) in number'>
                            <td>{{value.number}}</td>
                            <td>{{value.mc}}</td>
                            <td>{{value.dj}}</td>
                            <td>
                            <button @click='add(index)'>+</button>
                            {{value.num}}
                            <button @click='delt(index)'>-</button>
                            </td>
                            <td>{{(value.dj)*(value.num)}}</td>
                        </tr>
                        <tr>
                            <td colspan='5'>总计:<span>{{total}}</span>元</td>
                        </tr>
                    </tbody>
                </table>
            </div>
        `,
        data:function(){
            return{
                total:25
            }
        },
        methods:{
            add:function(index){
                this.number[index].num++
                this.getTotal()
            },
            delt:function(index){
                if(this.number[index].num>1){
                    this.number[index].num--
                }
                this.getTotal()
            },
            getTotal:function(){
                for(var i=0,to=0;i<this.number.length;i++){
                    to+=Number(this.number[i].dj*this.number[i].num)
                }
                this.total=to;
            }
        }
    })
    
    new Vue({
        el: '#app'
    })
</script>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 购物车是table做的,是一个响应式的购物车 [图片上传失败...(image-db9271-1537401916...
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,241评论 4 61
  • 繁忙的生活和工作等压力因素是否已经让你的皮肤变得越来越差了呢?男主外女主内的时代早已成为旧史,独立自主的女性越来越...
    liangpang8972阅读 422评论 0 0
  • 在我的殴豆桑还月薪300块的时候,也是计划生育正值最严的时候。欧豆桑最大的堂姐的儿子就要生二胎了。 当时,在怀孕前...
    凡笑笑笑笑笑阅读 276评论 1 1
  • 每天都能听见磨剪刀的吆喝声,却从未见过他们的手艺。 在很多制衣厂里,变钝了的剪刀一般不会请师傅去磨,很多厂里自己准...
    文伴阅读 1,258评论 7 10