Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >ES6模块化开发计算器

ES6模块化开发计算器

作者头像
爱学习的前端歌谣
发布于 2023-11-20 08:07:37
发布于 2023-11-20 08:07:37
14000
代码可运行
举报
文章被收录于专栏:前端小歌谣前端小歌谣
运行总次数:0
代码可运行

前言

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

目录结构

caculator.js

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import Calculator from "./Calculator";
;((doc)=>{
    var oCalculator = document.getElementsByClassName("J_calculater")[0]
    const init=()=>{
        new Calculator(oCalculator).init()
    }
    init()
})(document)

局部tpl文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<button data-method="plus">+</button>
 <button data-method="minus">-</button>
 <button data-method="mul">*</button>
<button data-method="div">/</button>

配合tpl文件的js文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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
    }
}

依赖配置

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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"
    }
}

运行结果

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-11-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 前端小歌谣 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
ES6模块化开发计算器小案例续
爱学习的前端歌谣
2023/11/16
1700
ES6模块化开发计算器小案例续
ES5计算器小案例
我是歌谣 最好的种树是十年前 其次是现在 今天继续给大家带来的是ES5计算器小案例的深入讲解
爱学习的前端歌谣
2023/11/11
1700
ES5计算器小案例
前端模块化开发--Node基础&&WebPack模块化开发
一、Node 开发 1、模块化开发 定义统一的方法:function.js javascript exports.sum = function sum(a, b) { return a + b; } 导入方法:use.js javascript var fun = require('./function') console.log(fun.sum(1, 2)) 2、服务器 javascript //创建服务器 var http = require('http'); http.createServer
MiChong
2020/09/24
9440
前端模块化开发--Node基础&&WebPack模块化开发
请简述什么是Vue组件化开发_vue组件化开发
真实项目开发过程中,我们都是使用组件化的去开发vue的项目,但是组件化的思想又是如何来的呢?下面就从开始讲解演变过程
全栈程序员站长
2022/09/19
5510
请简述什么是Vue组件化开发_vue组件化开发
关于原始typescript实现todolist笔记(装饰器模式)
我是歌谣 最好的种树是十年前 其次是现在 今天继续给大家带来的是原始typescript的讲解
爱学习的前端歌谣
2023/10/19
2480
关于原始typescript实现todolist笔记(装饰器模式)
React 折腾记 - (5) 记录用React开发项目过程遇到的问题(Webpack4/React16/antd等)
技术栈: react@16.6.0/ react-router-dom@v4 / webpack^4.23.1(babel7+)
CRPER
2018/12/05
1.6K0
React 折腾记 - (5) 记录用React开发项目过程遇到的问题(Webpack4/React16/antd等)
React多页面应用3(webpack性能提升,包括打包性能、提取公共包等)
本教程总共7篇,每日更新一篇,请关注我们!你可以进入历史消息查看以往文章,也敬请期待我们的新文章! 1.React多页面应用1(webpack开发环境搭建,包括Babel、热更新等) ----2017.12.28 2.React多页面应用2(处理CSS及图片,引入postCSS及图片处理等)----2017.12.29 3.React多页面应用3(webpack性能提升,包括打包性能、提取公共包等)----2017.12.30 4.React多页面应用4(webpack自动化生成多入口页面)----201
前端人人
2018/04/11
1.8K1
React多页面应用3(webpack性能提升,包括打包性能、提取公共包等)
Vue 08.webpack中使用.vue组件
注意:不能使用npm下载,需要从 github 上下载现成的包并解压,然后拷贝到项目中使用
LittlePanger
2020/04/14
1.2K0
JS ES6 模块化开发入门
type="module" 表示使用模块化, ./module/1.js 中的 ./ 不能省略
很酷的站长
2022/12/30
5830
JS ES6  模块化开发入门
VUE基本介绍
<script> new Vue({ data:{//定义变量初始值 //定义变量 userlist:[] }, created(){//调用定义方法 this.getUserList() }, methods:{//编写具体方法 getUserList(){ axios.get("http://xxxx") .then(//请求成功执行 response=>{ //箭头函数 //response 就是返回的数据 this.userList= response.data } ) .catch(同上)//请求失败 } } }) </script>
Dean0731
2020/05/28
7610
初探webpack之从零搭建Vue开发环境
平时我们可以用vue-cli很方便地搭建Vue的开发环境,vue-cli确实是个好东西,让我们不需要关心webpack等一些繁杂的配置,然后直接开始写业务代码,但这会造成我们过度依赖vue-cli,忽视了webpack的重要性,当遇到一些特殊场景时候,例如Vue多入口的配置、优化项目的打包速度等等时可能会无从下手。当然现在才开始学习vue2 + webpack可能有点晚,毕竟现在都在考虑转移到vue3 + vite了哈哈。
WindRunnerMax
2021/10/20
1.2K1
React多页面应用2(处理CSS及图片,引入postCSS,及图片处理等)
本教程总共7篇,每日更新一篇,请关注我们!你可以进入历史消息查看以往文章,也敬请期待我们的新文章! 1.React多页面应用1(webpack开发环境搭建,包括Babel、热更新等) ----2017.12.28 2.React多页面应用2(处理CSS及图片,引入postCSS及图片处理等)----2017.12.29 3.React多页面应用3(webpack性能提升,包括打包性能、提取公共包等)----2017.12.30 4.React多页面应用4(webpack自动化生成多入口页面)----201
前端人人
2018/04/11
9940
React多页面应用2(处理CSS及图片,引入postCSS,及图片处理等)
React多页面应用4(webpack4 提取第三方包及公共组件)
本教程总共9篇,每日更新一篇,请关注我们!你可以进入历史消息查看以往文章,也敬请期待我们的新文章! 1、React多页面应用1(webpack4 开发环境搭建,包括热更新,api转发等)---2018.04.04 2、React多页面应用2(webpack4 处理CSS及图片,引入postCSS,及图片处理等)---2018.04.08 3、React多页面应用3(webpack4 多页面实现)---2018.04.09 4、React多页面应用4(webpack4 提取第三方包及公共组件)---2018
前端人人
2018/04/11
1.9K0
React多页面应用4(webpack4 提取第三方包及公共组件)
webpack手动配置React开发环境
React提供了create-react-app的快速构建工具, 但作为一个专业的程序员(老司机), 面对复杂的项目, 入门级的构建工具, 是远远不够的, 我们这里从零开始, 用webpack, 手动
zhaoolee
2018/07/03
1K0
Vue2.0组件写法
vue2.0组件是一个vue文件 其中 <template lang="html">表示组件的html <script>组件的vue对象 <style lang="css">组件的样式文件 如下例实现父子组件通信
切图仔
2022/09/08
2900
Vue2.0组件写法
React多页面应用1(​webpack开发环境搭建,包括Babel、热更新等)
本教程总共7篇,每日更新一篇,请关注我们,敬请期待! 1.React多页面应用1(webpack开发环境搭建,包括Babel、热更新等) ----2017.12.28 2.React多页面应用2(处理CSS及图片,引入postCSS及图片处理等)----2017.12.29 3.React多页面应用3(webpack性能提升,包括打包性能、提取公共包等)----2017.12.30 4.React多页面应用4(webpack自动化生成多入口页面)----2017.12.31 5.React多页面应用5(
前端人人
2018/04/11
1K0
React多页面应用1(​webpack开发环境搭建,包括Babel、热更新等)
ES6模块化探究tab切换
我是歌谣 最好的种树是十年前 其次是现在 今天继续给大家带来的是探究tab切换的讲解
爱学习的前端歌谣
2023/11/20
1540
ES6模块化探究tab切换
入门 TypeScript 编写 React
Create React App 是一个官方支持的创建 React 单页应用程序的CLI,它提供了一个零配置的现代构建设置。当你使用 Create React App 来创建一个新的 TypeScript React 工程时,你可以运行:
icepy
2019/06/24
5.5K0
Vue学习-Webpack
从本质上来讲,webpack是一个现代的JavaScript应用的静态模块打包工具。
花猪
2022/02/17
1.3K0
Vue学习-Webpack
webpack 4 的 30 个步骤打造优化到极致的 react 开发环境
将 react 和 webpack4 进行结合,集 webpack 的优势于一身,从 0 开始构建一个强大的 react 开发环境。
夜尽天明
2019/06/18
2.4K0
相关推荐
ES6模块化开发计算器小案例续
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验