Vue实现购物车监听变化,以及模糊查询

举报
达拉崩巴斑得贝迪卜多 发表于 2021/12/24 15:11:43 2021/12/24
【摘要】 Vue实现购物车监听变化,以及模糊查询 css<style> * { margin: 0; padding: 0; } header { display: flex; justify-content: space-between; } ...

Vue实现购物车监听变化,以及模糊查询

css

<style>
        * {
            margin: 0;
            padding: 0;
        }

        header {
            display: flex;
            justify-content: space-between;
        }

        #app {
            width: 80%;

            background-color: #eee;
            padding: 20px;
            margin: 0 auto;
        }

        img {
            width: 50px;
            height: 50px;
        }
    </style>

html

<body>
    <div id="app">
        <h1>Vue实现购物车监听变化,以及模糊查询</h1>
        <header>
            <!-- 模糊查询   -->
            <button type="button" class="btn btn-info">名称搜索</button>
            <input type="text" class="form-control" placeholder="输入查询内容" v-model="input">
        </header>

        <table class="table table-bordered">
            <tr>
                <th>图片</th>
                <th>商品名称</th>
                <th>商品数量</th>
                <th>商品单价()</th>
                <th>商品金额()</th>
                <th>操作</th>
            </tr>
            <tbody>
                <!-- 当前对应的数据是复制粘贴,再把对应的数据渲染进来的时候,会先从缓存里 
                    :key键 对应的值一定要是唯一的 如果不是唯一,脚手架会报错 -->
                <tr v-for="(v,i) in searchData" :key="v.id">
                    <td><img :src='v.url' alt=""></td>
                    <td>{{v.name}}</td>
                    <td>
                        <button @click="v.count -= 1" :disabled="v.count==0">-</button>
                        {{v.count}}
                        <button @click="v.count += 1" :disabled="v.count==5">+</button>
                    </td> <!-- vue中文本格式化的特性 ---  过滤器-->
                    <td>{{v.price | priceFilters(2)}}</td> <!--  | priceFilters 过滤器写法 -->
                    <td>{{v.count*v.price | priceFilters(1)}}</td>
                    <td><button type="button" class="btn btn-warning">商品详情</button></td>
                </tr>
            </tbody>

            <tr>
                <td colspan="6">{{totalCount}} 件商品总计(不含运费):{{totalPrice | priceFilters(2)}}</td>
            </tr>
        </table>

    </div>
</body>

js


new Vue({
    el: "#app",
    data: {
        input: "",/* 输入框的值 */
        lists: [
            { id: 1, name: "苹果", price: 10, count: 2, url: "./苹果.jpg" },
            { id: 2, name: "梨", price: 20, count: 1, url: "./梨.jpg" },
            { id: 3, name: "芒果", price: 15, count: 1, url: "./芒果.jpg" },
            { id: 4, name: "葡萄", price: 25, count: 2, url: "./葡萄.jpg" },
            { id: 5, name: "车厘子", price: 120, count: 1, url: "./车厘子.jpg" }
        ]
    },
    methods: {

    },
    filters: { //过滤器 管道 用于文本格式化 比如:时间戳  10--->¥10  可传参
        priceFilters: function (data, n) { //可以直接获取到传过来的参数
            return '¥' + data.toFixed(n)  /* toFixed(2)保留两位小数 */
        }
    },
    computed: { //计算属性  和在data一样,但是名字不能相同  用的时候直接 {{totalCount}}
        //总的数量
        totalCount: function () {
            var n = 0;
            this.searchData.forEach(function (item, index) {
                n += item.count;
            });
            return n;
        },
        //总的金额
        totalPrice: function () {
            var n = 0;
            this.searchData.forEach(function (item, index) {
                n += item.count * item.price;
            });
            return n;
        },
        searchData: function () { //模糊匹配   
            if (!this.input) {  //如果还没有输入,返回this.lists 
                return this.lists
            }
            /*拿到数据展示不出来*/                                  // filters vue中的过滤器
            /*  return this.lists.filter(function (item, index) { //filter过滤的方法,是一个方法 . 像Js的一个方法                                   
                 return item.name.includes(this.input)  //includes 判断一个数组是否包含一个指定的值。
             }) */
            //在回调函数,定时器里  this的指向会发生变化  指向window
            // 解决办法1  变为箭头函数     
            return this.lists.filter(item => { //filter过滤的方法,是一个方法 . 像Js的一个方法                                   
                return item.name.includes(this.input)  //includes 判断一个数组是否包含一个指定的值。
            })
        }
    }

})

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。