Angular 结合RequireJs实现模块化开发
angular的指令是模块化很好的一个体现,下面我将只使用指令(不用控制器),结合requirejs,实现模块化开发。
模块化关系图:
传统开发方式
<!--aaa模块-->
<div>
<h3>this is aaa</h3>
<input type="text" ng-model="asd">{{asd}}
<button ng-click="submit()">submit</button>
</div>
<!--bbb模块-->
<div>
<h3>this is bbb</h3>
<ul>
<li ng-repeat="el in list">{{el}}</li>
</ul>
<!--ccc模块-->
<div>
<h3>this is ccc</h3>
</div>
</div>
把所有模块写在一起,可读性差,耦合度高,难以维护。
requires+angular模块化开发方式
index.html:
<aaa></aaa>
<bbb>
<ccc></ccc>
</bbb>
主页面干干净净。
aaa
aaa模块包括aaa.js和aaa.html
aaa.html
<div>
<h3>this is aaa</h3>
<input type="text" ng-model="asd">{{asd}}
<button ng-click="submit()">submit</button>
</div>
aaa.js(引入aaa.html,放入模板中,在link中写业务逻辑,service是用来通信的)
define(['app','text!./aaa.html'],function(app,aaa){
app.directive("aaa", function(service) {
return {
restrict: 'AE',
template: aaa,
replace: true,
scope:true,
link:function(scope,element,attrs){
scope.submit=function() {
service.updateName(scope.asd);
};
}
}
});
});
封装在一个文件夹里面,随时调用复用:
require(['./aaa/aaa'])即可调用aaa模块;
bbb
bbb模块也是两个文件:
bbb.html
<div>
<h3>this is bbb</h3>
<ul>
<li ng-repeat="el in list">{{el}}</li>
</ul>
<div ng-transclude></div>
</div>
bbb.js
define(['app','text!./bbb.html'],function(app,bbb){
app.directive('bbb',function(service){
return{
restrict:'AE',
template:bbb,
replace:'true',
scope:true,
transclude:true,
link: function (scope,element,attrs) {
scope.list=[1,2,3,4];
scope.$on('nameUpdated', function() {
scope.list.push(service.name);
});
}
}
});
});
bbb可以和aaa模块通过service通信,bbb还包含ccc(通过transclude嵌入)
ccc
ccc模块也是两个文件:
ccc.html
<div>
<h3>this is ccc</h3>
</div>
ccc.js
define(['app','text!./ccc.html'],function(app,ccc){
app.directive('ccc',function(){
return{
restrict:'AE',
template:ccc,
replace:'true',
scope:true,
link: function (scope,element,attrs) {
}
}
});
});
三个模块解耦后,很好维护,因为一个文件的代码量不会超过20行,而且还便于复用。可以称为组件式开发。不要小看这个例子,并非玩玩而已,而是真正的工程化开发思路!
最后一起调用(只调用了aaa,bbb,ccc已经在bbb里调用过了),并启动app:
require(['angular','./aaa/aaa','./bbb/bbb','./ccc/ccc','service'],function(angular){
angular.bootstrap(document,['app']);
});
最后看下总体目录:
Angular 结合RequireJs实现模块化开发的更多相关文章
- 在Html中使用Requirejs进行模块化开发
在前端模块化的时候,不仅仅是js需要进行模块化管理,html有时候也需要模块化管理.这里就介绍下如何通过requirejs,实现html代码的模块化开发. 如何使用requirejs加载html Re ...
- 使用requireJs进行模块化开发
requireJs使用 requireJs 使用require.js的第一步,是先去官方网站下载最新版本. 下载后,假定把它放在js子目录下面,就可以加载了. <script src=" ...
- Javascript模块化开发,使用模块化脚本加载工具RequireJS,提高你代码的速度和质量。
随着前端JavaScript代码越来越重,如何组织JavaScript代码变得非常重要,好的组织方式,可以让别人和自己很好的理解代码,也便于维护和测试.模块化是一种非常好的代码组织方式,本文试着对Ja ...
- [工具配置]使用requirejs模块化开发多页面一个入口js的使用方式
描述 知道requirejs的都知道,每一个页面需要进行模块化开发都得有一个入口js文件进行模块配置.但是现在就有一个很尴尬的问题,如果页面很多的话,那么这个data-main对应的入口文件就会很多. ...
- 【模块化开发】------requireJS的基本使用------【巷子】
前言 为了提高代码的复用度,开发人员会按照功能把大量的js代码分成若干文件,这样在多个页面就可以使用同一个文件了.,下面是某个网站的js引用情况 虽然代码的复用度提升了,但是缺点也体现了出来 缺点: ...
- 模块化开发RequireJS之shim配置
一.shim requirejs使用AMD规范开发,若开发过程中加载非AMD规范js,需要使用requirejs的shim进行配置. shim配置语法为: //配置文件 requirejs.confi ...
- 使用requirejs模块化开发多页面一个入口js的使用方式
描述 知道requirejs的都知道,每一个页面需要进行模块化开发都得有一个入口js文件进行模块配置.但是现在就有一个很尴尬的问题,如果页面很多的话,那么这个data-main对应的入口文件就会很多. ...
- 模块化开发(requireJS)
模块化 在前端使用模块化开发,可以将代码根据功能实施模块的划分,每个模块功能(职责)单一,在需要更改对应的功能的时候,只需要对指定的模块进行修改,其他模块不受任何影响. 为什么要进行前端模块化? 达到 ...
- JS模块化开发:使用SeaJs高效构建页面
一.扯淡部分 很久很久以前,也就是刚开始接触前端的那会儿,脑袋里压根没有什么架构.重构.性能这些概念,天真地以为前端===好看的页面,甚至把js都划分到除了用来写一些美美的特效别无它用的阴暗角落里,就 ...
随机推荐
- Tomcat7 配置 ssl
运行一个配置了ssl的项目时tomcat总是启动不成功,报错:“requires the APR/native library which is not available”,后来发现是找不到apr的 ...
- Unity3D上可以发布到IOS使用的SQLite数据库
地址:https://github.com/codecoding/SQLite4Unity3d Unity5.1.1f 发布,在IOS 8.3上亲测可用,Android好像有点问题. 也可用参考下这个 ...
- myeclipse为表生成持久化对象
1.连接好数据库之后,右击数据库名,选择open connection, 2.像这样展开: 3.如图选择, 选择之后如下图: 确定即可.
- 方维 o2o app源码出售
方维 o2o app源码出售 方维o2oapp源码出售 1.本人官方5万购买,现把方维o2o app 源码低价出售: 2.包括网站源码本地搭建包成功提供指导 3.包括网站说明文档,不包含app说明文档 ...
- IIS和4.0安装到底有没有先后顺序解答
在很多人或许很多技术大神都会觉得IIS的安装和4.0没得先后顺序的.其错误弊端在与IIS没有注册到4.0上. 经过今天遇到了服务器安装服务端发觉报错[无法识别的属性“targetFramework”. ...
- CI框架,源代码一次性判断获取post(get)数据是否有某个字段值为空方法
一.以下是CI框架 1.把所有的要接收的字段放在数组中 例: 我要接收:id,name,age,mobile 等字段 $req = array('id','name','age','mobile'); ...
- AndroidStudio错误总结及解决(待续)
AndroidStudio错误总结及解决 一. 当安装好AndroidStudio开启的时候出现如下错误: 百度的解决方法: 1)进入刚安装的Android Studio目录下的bin目录.找到ide ...
- DotNet Core 介绍
前言 asp.net core rtm 6月底即将发布,自己也想着为社区做点共享,刚好最近不太忙,看到社区的小伙伴们都在为dotnet core的推广而贡献力量,项目中刚好在用rc2版本,就多写些文章 ...
- ASP.NET Core 优雅的在开发环境保存机密(User Secrets)
前言 在应用程序开发的过程中,有的时候需要在代码中保存一些机密的信息,比如加密密钥,字符串,或者是用户名密码等.通常的做法是保存到一个配置文件中,在以前我们会把他保存到web.config中,但是在A ...
- ABP理论学习之OWIN集成
返回总目录 如果你的应用中使用了OWIN,那么需要在主项目(一般来说是指Web项目)中添加Abp.Owin的nuget包,然后像下面那样在OWIN的 Startup文件中调用 UseAbp()扩展方法 ...