Vue(购物车案例 代码笔记)

所有内容来自黑马程序员课程,如果侵犯联系删除。
按照组件化方式实现业务需求

  1. 按照业务功能进行组件化划分

     	 - 标题组件(展示文本)
     	 - 列表组件(列表展示,商品数量变更,商品删除)
     	 - 组件结算(计算商品金额)
    

2.功能实现步骤

		 - 实现整体布局和样式效果
		 - 划分独立的功能组件
		 - 组合所有的子组件形成整体结构
		 - 逐个实现各个组件功能
		 			-标题组件
		 			-列表组件
		 			-结算组件

html+css静态;初始状态

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style type="text/css">
        .container .cart {
            width: 300px;
            margin: auto;
        }
        
        .container .title {
            background-color: lightblue;
            height: 40px;
            line-height: 40px;
            text-align: center;
            /*color: #fff;*/
        }
        
        .container .total {
            background-color: #FFCE46;
            height: 50px;
            line-height: 50px;
            text-align: right;
        }
        
        .container .total button {
            margin: 0 10px;
            background-color: #DC4C40;
            height: 35px;
            width: 80px;
            border: 0;
        }
        
        .container .total span {
            color: red;
            font-weight: bold;
        }
        
        .container .item {
            height: 55px;
            line-height: 55px;
            position: relative;
            border-top: 1px solid #ADD8E6;
        }
        
        .container .item img {
            width: 45px;
            height: 45px;
            margin: 5px;
        }
        
        .container .item .name {
            position: absolute;
            width: 90px;
            top: 0;
            left: 55px;
            font-size: 16px;
        }
        
        .container .item .change {
            width: 100px;
            position: absolute;
            top: 0;
            right: 50px;
        }
        
        .container .item .change a {
            font-size: 20px;
            width: 30px;
            text-decoration: none;
            background-color: lightgray;
            vertical-align: middle;
        }
        
        .container .item .change .num {
            width: 40px;
            height: 25px;
        }
        
        .container .item .del {
            position: absolute;
            top: 0;
            right: 0px;
            width: 40px;
            text-align: center;
            font-size: 40px;
            cursor: pointer;
            color: red;
        }
        
        .container .item .del:hover {
            background-color: orange;
        }
    </style>
</head>

<body>
    <div id="app">
        <div class="container">
            <div class="cart">
                <div class="title">我的商品</div>
                <div>
                    <div class="item">
                        <img src="img/1.ico" alt="">
                        <div class="name">哈哈哈哈</div>
                        <div class="change">
                            <a href="">-</a>
                            <input type="text" class="num">
                            <a href="">+</a>
                        </div>
                        <div class="del">*</div>
                    </div>
                    <div class="item">
                        <img src="img/1.ico" alt="">
                        <div class="name">哈哈哈哈</div>
                        <div class="change">
                            <a href="">-</a>
                            <input type="text" class="num">
                            <a href="">+</a>
                        </div>
                        <div class="del">*</div>
                    </div>
                    <div class="item">
                        <img src="img/1.ico" alt="">
                        <div class="name">哈哈哈哈</div>
                        <div class="change">
                            <a href="">-</a>
                            <input type="text" class="num">
                            <a href="">+</a>
                        </div>
                        <div class="del">*</div>
                    </div>
                    <div class="item">
                        <img src="img/1.ico" alt="">
                        <div class="name">哈哈哈哈</div>
                        <div class="change">
                            <a href="">-</a>
                            <input type="text" class="num">
                            <a href="">+</a>
                        </div>
                        <div class="del">*</div>
                    </div>
                </div>
                <div class="total">
                    <span>总价</span>
                    <button>结算</button>
                </div>
            </div>
        </div>
    </div>
    <script src="js/vue.js"></script>
    <script>
    </script>
</body>

</html>

vue后的代码:

// 引入json文件测试
const data = require('./data.json');
//引入路径模块
const path = require('path');
//引入操作文件模块
const fs = require('fs');

// 自动生成图书编号(自增)
let maxBookCode = () => {
    let arr = [];
    data.forEach((item) => {
        arr.push(item.id);
    });
    // 返回数组中最大数
    return Math.max.apply(null, arr);
};
// 把内存数据写入文件
let writeDataToFile = (res) => {
    console.log(res);
    fs.writeFile(path.join(__dirname, './data.json'), JSON.stringify(data, null, 4), (err) => {
        if (err) {
            res.json({
                status: 500
            });
        }
        res.json({
            status: 200
        });
    })
};

//获取图书列表
exports.getAllBooks = (req, res) => {
    res.send(data);
};
//添加图书
exports.addBooks = (req, res) => {
    let info = req.body;
    let book = {};
    for (let key in info) {
        book[key] = info[key];
    }
    book.date = Date();
    book.id = maxBookCode() + 1;
    data.push(book);
    writeDataToFile(res);

};
// 验证图书是否存在
exports.checkName = (req, res) => {
    let name = req.params.name;
    if (name.trim().length == 0) {
        res.json({
            status: 3
        })
    }
    // console.log(name);
    let flag = false;
    data.some(item => {
        if (item.name == name) {
            flag = true;
            return true;
        }
    });
    if (flag) {
        res.json({
            status: 1
        });
    } else {
        res.json({
            status: 2
        })
    }
};
// 编辑图书根据id查找图书
exports.ToEditBook = (req, res) => {
    let id = req.params.id;
    book = {};
    data.some((item) => {
        if (id == item.id) {
            book = item;
            return true;
        }
    });
    res.json(book);
};
// 编辑图书功能
exports.editBook = (req, res) => {
    let info = req.body;
    let id = req.params.id;
    data.some(item => {
        if (item.id == id) {
            for (let key in info) {
                item[key] = info[key];
            }
            return true;
        }
    });
    writeDataToFile(res);
};

// 删除图书
exports.deleteBook = (req, res) => {
    let id = req.params.id;
    data.some((item, index) => {
        if (id == item.id) {
            data.splice(index, 1);
            return true;
        }
    })
    writeDataToFile(res);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值