我所知道的前端组件化与模块化

序言:组件化?模块化?这都是什么鬼?这是最初看到这2个新名词的反应。随着时间的推移,似乎、可能、大概明白了一点,于是想说说自己的理解(仅仅是自己的理解)

一、组件化

忘记什么时候看到这个词的了,由于用过bootstrap的前提下(一下简称BS),当时第一反应是这样的,组件化不就是像BS那样把html拆分为:按钮组、栅格系统、导航组等等N多个组件,用的时候直接用BS提供class不就行了吗?
当然简单可以这么理解,但是跟深层次的理解应该是这样的,如你看到的一个html源码可能是这样的:

<body >
    <top-header></top-header>
    <common-content></common-content>
    <top-footer></top-footer>
</body>

很多人咋一看可能回想,这tm是html标签吗?当然不是,只是自定义的组件标签,通过第三方去处理,好处就是互相不影响,用谁放谁,不用拿走,维护起来和多人协作更方便。

二、模块化

前端模块化更确切的说应该是javascript的模块化,其实就是一些功能以及业务逻辑的封装,比如之前一个小例子:鼠标悬停出现下拉框与鼠标悬停切换(具体参看之前一篇:如何巧妙的用面向对象封装常用效果

function Overitem(option){
    this.init(option);
}
Overitem.prototype={
    init:function(option){
        var _self=this;
        _self.btn=document.getElementById(option.btn)||'';
        _self.item=document.getElementById(option.item)||'';
        _self.addclassname=option.addclass;
        //2.0 绑定事件
        _self.btn.onmouseover=_self.showitem.bind(_self);
        _self.btn.onmouseout=_self.hideitem.bind(_self);
    },
    //2.1 定义事件
    showitem:function () {
        //如何让this指向new Overitem;,在调用的时候用bind把this绑定上去
        this.btn.className=this.addclassname;
        this.item.style.display='block';
    },
    hideitem:function () {
        //如何让this指向new Overitem;,在调用的时候用bind把this绑定上去
        this.btn.className='';
        this.item.style.display='none';
    }
};

function Tabitem(option){
    this.init(option);
}
Tabitem.prototype={
    init:function(option){
        var _self=this;
        _self.btn=document.getElementsByClassName(option.btn)||'';
        _self.item=document.getElementsByClassName(option.item)||'';
        for(var i=0;i<_self.btn.length;i++){
            _self.btn[i].index=i;
            _self.btn[i].onmouseover=function(){
                for(var j=0;j<_self.item.length;j++){
                    _self.btn[j].className=option.btn;
                    _self.item[j].className=option.item;
                }
                _self.btn[this.index].className=option.btn+' '+option.btnaddclass;
                _self.item[this.index].className=option.item+' '+option.itemaddclass;
                //console.log(this);
                //console.log(_self);
            };
        }
    }
};

这就是2个简单的功能模块,用谁new谁互不干扰,即使有n多个,与外界的桥梁就是所传的参数。说的不够仔细,但或多或少能理解一点- -

想了解更多请移步:组件化模块化

时间: 2024-09-09 16:32:22

我所知道的前端组件化与模块化的相关文章

组件化,模块化,插件化

同步发布在:http://snowdream.github.io/blog/2016/02/29/widgets-modules-plugins/ 从事Adroid开发几年来,逐渐对Android应用架构和发展趋势有一点点认识,总结为三个词:"组件化,模块化,插件化".下面以一张图为基础,分别从这个三个方面进行阐述.如有不足,还请指正. 组件化 为什么需要组件化? Android的原生控件,基本上都没法直接拿来用,太丑了.另外一方面,原生控件在不同的Android版本上可能有不同风格,

前端组件化(未完)

大家都知道DRY (Don't Repeat Yourself),像 Angular2 一样 Focus on Components , 还有React, Vue.js等,前端组件化开发已经是一个很老的话题了,只是在前端领域,这个和用户最直接交互的舞台,要实现视觉和代码的完全组件化,像生产车间一样组装然后交给用户,并不是很轻松的一件事情.但做好了,绝对是提高前端工程化和生产力的有效手段.先分享几篇我收集的相关文章,觉得可以借鉴思考- 参考阅读: Web应用的组件化(一)基本思路 备注: 文章思路

谈笑风生组件化

在当今的前端开发领域,大红大紫的组件化开发如万人空巷,前端技术圈中关于组件化讨论的文章亦如汗牛充栋.然而别人的理解终归是别人的,作为一个胸存小志的开发者,我还是希望能够根据自己的理解和实际工作,总结自己对组件和组件化开发的认知. 在我第一次接触组件化概念时,一时迷迷糊糊,如坠云雾深处.组件是什么?组件化开发是什么?为什么大牛们知道这么多而我不知道?这应该并不是我个人的疑问,每一个除此接触概念的新手,都会有此疑惑.   为什么大牛们知道这么多而我不知道? 我曾经无数次为类似的问题而烦恼,也曾感到急

详解vue.js组件化开发实践_javascript技巧

前言 公司目前制作一个H5活动,特别是有一定统一结构的活动,都要码一个重复的轮子.后来接到一个基于模板的活动设计系统的需求,便有了下面的内容.借油开车. 组件化 需求一到,接就是怎么实现,技术选型自然成为了第一个问题.鉴于目前web前端mvvm框架以及组件化开发方式的流行,决定技术栈采用:vue + es6 + 组件化. 这里首先简单说下web前端组件化开发方式的历程: 最早的组件化结构,代码结构可能如下: - lib/components/calendar |- calendar.css |-

AlloyTeam:致我们终将组件化的 Web (多图)

这篇文章将从两年前的一次技术争论开始.争论的聚焦就是下图的两个目录分层结构.我说按模块划分好,他说你傻逼啊,当然是按资源划分. "按模块划分"目录结构,把当前模块下的所有逻辑和资源都放一起了,这对于多人独自开发和维护个人模块不是很好吗?当然了,那争论的结果是我乖乖地改回主流的"按资源划分"的目录结构.因为,没有做到JS模块化和资源模块化,仅仅物理位置上的模块划分是没有意义的,只会增加构建的成本而已. 虽然他说得好有道理我无言以对,但是我心不甘,等待他日前端组件化成熟

06Vue.js快速入门-Vue组件化开发

组件其实就是一个拥有样式.动画.js逻辑.HTML结构的综合块.前端组件化确实让大的前端团队更高效的开发前端项目.而作为前端比较流行的框架之一,Vue的组件和也做的非常彻底,而且有自己的特色.尤其是她单文件组件开发的方式更是非常方便,而且第三方工具支持也非常丰富,社区也非常活跃,第三方组件也呈井喷之势.当然学习和使用Vue的组件也是我们的最重要的目标. 6.1. 全局扩展方法Vue.extend Vue提供了一个全局的API,Vue.extend可以帮助我们对Vue实例进行扩展,扩展完了之后,就

LARAVEL 中使用 VUE 组件化开发例子

现今前端组件化开发.MVVM 模式,给开发带来了很多的便利,可读性.可维护性更高.然而自 Laravel 5.3 开始,VueJS 成为框架默认的标配. 本文基于 Laravel 5.1 LTS 版本引入 Vue 2.0 进行配置. 我已在 Github 配置好,Clone 下来后按照 README 安装依赖后即可用: https://github.com/jcc/vue-laravel-example 步骤一:配置 PACKAGE.JSON 1. 在根目录下修改 package.json, 可

一起谈.NET技术,使用Dijit实现界面组件化开发

对于组件化的软件工程设计,很多开发人员都比较熟悉.组件化的设计适合于复杂的软件系统和团队协作开发.把软件系统划分成若干个组件,组件之间通过预先定义好的接口和协议进行通讯和协作,共同完成整个软件系统的职责.团队中的开发人员可以各自负责不同的组件.组件化的思想在桌面应用和Web应用后台开发中比较流行,相关的技术和实践都比较成熟. 而在Web应用的前端部分,组件化一直进展得比较缓慢.这其中的原因有很多,最主要的是Web应用的前端在开始的时候比较简单,没有组件化和设计的必要.随着Ajax应用的流行,We

使用Dijit实现界面组件化开发

对于组件化的软件工程设计,很多开发人员都比较熟悉.组件化的设计适合于复杂的软件系统和团队协作开发.把软件系统划分成若干个组件,组件之间通过预先定义好的接口和协议进行通讯和协作,共同完成整个软件系统的职责.团队中的开发人员可以各自负责不同的组件.组件化的思想在桌面应用和Web应用后台开发中比较流行,相关的技术和实践都比较成熟. 而在Web应用的前端部分,组件化一直进展得比较缓慢.这其中的原因有很多,最主要的是Web应用的前端在开始的时候比较简单,没有组件化和设计的必要.随着Ajax应用的流行,We