ES6模块化开发计算器小案例

 前言

70beceb224610fb947279848ac047b98.png

  大家好 我是歌谣 今天继续延续上一节课程的编写 本次要说模块化 将html的文件分块拼装上去

 目录结构

a562d7116f81033165491e4c73a2ddf8.png

707b28e2400cbc4c630c3f2bd8a5c6a4.png

 caculator.js

1e99264b437214855f7634932a1848fc.png

import Compute from "./Compute"
import ResultComponent from "./Header";
import InputGroupComponent from "./Middle";
import BtnGroupComponent from "./Footer";
import {
    trimSpace,
    digitalize
} from "./tools"
@Compute
export default class Calculator {
    constructor(el) {
        this.name = "Calculator";
        this.el = el
        this.resultComponent = new ResultComponent()
        this.inputGroupComponent = new InputGroupComponent()
        this.btnGroupComponent = new BtnGroupComponent()
    }
    init() {
        this.render()
        this.bindEvent()
    }
    render() {
        const oFrag = document.createDocumentFragment()
        oFrag.append(this.resultComponent.tpl())
        oFrag.append(this.inputGroupComponent.tpl())
        oFrag.append(this.btnGroupComponent.tpl())
        this.el.appendChild(oFrag)
    }
    bindEvent() {
        const el=this.el
        this.oResult = el.getElementsByClassName("result")[0];
        this.oBtnGroup = el.getElementsByClassName("btn-group")[0];
        this.oInputs = el.getElementsByClassName("num-input");
        this.oBtnGroup.addEventListener("click", this.onBtnClick.bind(this), false)
    }
    onBtnClick(ev) {
        const e = ev || window.event,
            tar = e.target || e.srcElement,
            tagName = tar.tagName.toLowerCase();
        console.log(tagName)
        if (tagName === 'button') {
            const method = tar.getAttribute("data-method");
            console.log(method, "method is")
            var fval = digitalize(trimSpace(this.oInputs[0].value));
            var sval = digitalize(trimSpace(this.oInputs[1].value));
            this.setResult(method, fval, sval)
        }
    }
    setResult(method, fval, sval) {
        console.log(method, fval, sval)
        this.oResult.innerText = this[method](fval, sval)
    }
}

compute.js

2e208981b414a520912680fbdc9fa3f8.png

// export default class Compute{
//     plus(a,b){
//         return a+b;
//     }
//     minus(a,b){
//         return a-b
//     }
//     mul(a,b){
//         return a*b
//     }
//     div(a,b){
//         return a/b
//     }
// }




export default (target) => {
    target.prototype.plus=function(a, b){
        return a + b;
    }
    target.prototype.minus=function(a, b){
        return a - b
    }
    target.prototype.mul=function(a, b){
        return a * b
    }
    target.prototype.div=function(a, b){
        return a / b
    }
}

 index.html

95d88239794624919446467cd54094d9.png

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>计算小案例</title>
    </head>
    <body>
        <div class="calculator J_calculater">
            
        </div>
    </body>
    
    </html>
</body>
</html>

 index.js

059868b38947a567f2e9a1cadd1491ad.png

import Calculator from "./Calculator";
;((doc)=>{
    var oCalculator = document.getElementsByClassName("J_calculater")[0]
    const init=()=>{
        new Calculator(oCalculator).init()
    }
    init()
})(document)

 局部tpl文件

0894b4f90ac78e16fda57e4781b82a2d.png

<button data-method="plus">+</button>
 <button data-method="minus">-</button>
 <button data-method="mul">*</button>
<button data-method="div">/</button>

配合tpl文件的js文件

82af99c9b6fcf212fa0345bb19cd4093.png

import tpl from "./index.tpl"




export default class BtnGroupComponent{
    constructor(){
        this.name="BtnGroupComponent"
    }
    tpl(){
        const oDiv=document.createElement("div")
        oDiv.className='btn-group'
        oDiv.innerHTML=tpl()
        return oDiv
    }
}

依赖配置

2273217f133e4661b49bb7aa8bb55e1c.png

const HtmlWebpackPlugin = require('html-webpack-plugin')
path = require("path")
module.exports = {
    mode: 'development',
    entry: {
        index: path.resolve(__dirname, "./index.js")
    },
    output: {
        path: path.resolve(__dirname + "/dist"),
        filename: 'js/[name].js'
    },
    module: {
        rules: [{
            test: /\.js$/,
            loader: 'babel-loader',
            exclude: path.resolve(__dirname, "node_modules"),
        },
        {
            test: /\.css$/,
            use: [
                'style_loader',
                'css_loader'
            ]
        },
        {
            test: /\.scss$/,
            use: [
                'style_loader',
                'css_loader',
                'scss-loader'
            ]
        },
        {
            test: /\.tpl$/,
            use: [
                {
                    loader: 'ejs-loader',
                    options: {
                        esModule: false,
                        variable: 'data',
                    },
                },
            ],
        }
       ]
   
    },
    plugins: [
        new HtmlWebpackPlugin({
            filename: 'index.html',
            template: path.resolve(__dirname, "./index.html"),
            chunks: ['index'],
            excludeChunks: ['node_modules']
        })
    ],
    devServer: {
        open: true,
        host: "localhost",
        port: "3002"
    }
}

 运行结果

3d8b7ca3201d5fcaa544a93a3c29f703.png

ddfe6a9e7f182105c0cbc28b8fbea965.png

f845a979b818b814bbb1a00182627734.png

b598f2f51d7998f06676b940ef926ea0.png

ae6352c56969ece52606ae61cdee0d42.png

c8e172a235ea60e0532413440f9c88ce.png

点击上方 蓝字 关注我们

下方查看历史文章

5d6ef8d720a82e136ce7005c430cde26.png

ES6模块化开发计算器小案例续

ES5计算器小案例

原型和原型链深入

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值