Angular的Bootstrap(引导)和Compiler(编译)机制


Posted in Javascript onJune 20, 2016

在上节简单介绍了Angular js框架,在这节将继续Angular的Bootstrap(引导)和Compiler(编译)机制。

一:Bootstrap:Angular的初始化

1:Angular推荐的自动化初始如下:

<!doctype html>
<html xmlns:ng="http://angularjs.org" ng-app>
<body>
...
<script src="angular.js">
</body>
</html

利用ngapp标示你需要自动引导应用程序的根节点,一般典型为html tag。在DOMContentLoaded事件触发Angular会自动寻找ngapp作为应用的根节点,如果找到则会进行如下操作:

1.加载module(模块)相关directive(指令)。

2.创建应用程序injector(Angular的注入机制).

3.编译处理ng-app作为根节点的指令。这里允许你自定义选择DOM节点作为应用根节点。

<!doctype html>
<html ng-app="optionalModuleName">
<body>
I can add: {{ + }}.
<script src="angular.js"></script>
</body>
</html>

2:手动初始化:

如果想对对初始化有更多的控制权,可以采用自定义手动引导方法初始化代替angular的自动初始化。比如你需要在angular编译模板之前做一些事情,比如改变模板某些内容。手动引导方式将会如下:

<!doctype html>
<html xmlns:ng="http://angularjs.org">
<body>
Hello {{'World'}}!
<script src="http://code.angularjs.org/angular.js"></script>
<script>
angular.element(document).ready(function() {
angular.bootstrap(document);
});
</script>
</body>
</html>

1.在页面所有代码加载完成后,找到html模板根节点(典型为document元素).

2.调用api/angular.bootstrap(angular.bootstrap(element[, modules]))编译模板使其可执行.

二:Compiler:Angular的编译

Angular的编译机制允许开发人员给浏览器添加新的Html语法,允许我们添加一些html节点,attribute,甚至创建一些自定义的节点,attribute。Angular把这些行为的扩展成为指令directives.Angular带来了有用的directive,并允许我们创建特定领域的directive。

1: Compiler处理分为两个步骤:

1.转换DOM,收集directive,返回Link(连接)function。

2.合并指令和Scope产生一个活生生的View。scop mode中的任何改变都会通过反应到view中,并来自view的用户交互也会同步到scope model,并scope是一个单一数据源。

2:指令Directive

Directive是一个会被特殊的html设计编辑处理的行为。其可以被放置在节点的names, attributes, class 上,甚至是html注释中。下面是Angular自带的ng-bind的等价写法:

<span ng-bind="exp"></span>
<span class="ng-bind: exp;"></span>
<ng-bind></ng-bind>
<!-- directive: ng-bind exp ?>

directive仅仅是一个在dom中会被Angular执行的一个function。下面是一个拖拽的实例,其可以被应用于span,div的attribute上:

angular.module('drag', []).directive('draggable', function ($document) { 
var startX = , 
startY = , 
x = , 
y = ; 
return function (scope, element, attr) { 
element.css({ 
position: 'relative', 
border: 'px solid red', 
backgroundColor: 'lightgrey', 
cursor: 'pointer' 
}); 
element.bind('mousedown', function (event) { 
startX = event.screenX - x; 
startY = event.screenY - y; 
$document.bind('mousemove', mousemove); 
$document.bind('mouseup', mouseup); 
}); 
function mousemove(event) { 
y = event.screenY - startY; 
x = event.screenX - startX; 
element.css({ 
top: y + 'px', 
left: x + 'px' 
}); 
} 
function mouseup() { 
$document.unbind('mousemove', mousemove); 
$document.unbind('mouseup', mouseup); 
} 
} 
});

Demo
you can drag and move me to anywhere !

3:view理解

有许多的模板引擎都被设计为模板(template)和数据(model)的合并返回一个字符串,再利用innerHTML追加在DOM节点,这以为则数据的任何改变都必须重新合并生成新的内容追加在DOM上。形如下图属于单向绑定技术:

Angular的Bootstrap(引导)和Compiler(编译)机制

而Angular则不同利用directive指令而非字符串,返回值是一个合并数据model的link function。view和model的绑定是自动,透明的,不需要开发人员添加额外的action去更新view,Angular在这里不仅是数据model的绑定,还有行为概念。作为双向的绑定,形如下图:

Angular的Bootstrap(引导)和Compiler(编译)机制

资料:

 1.Angular官网:http://angularjs.org/

2.代码下载:https://github.com/angular/angular.js

以上所述是小编给大家介绍的Angular的Bootstrap(引导)和Compiler(编译)机制,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
jquery select操作的日期联动实现代码
Dec 06 Javascript
基于jQuery的Spin Button自定义文本框数值自增或自减
Jul 17 Javascript
window.open不被拦截的简单实现代码(推荐)
Aug 04 Javascript
超级简易的JS计算器实例讲解(实现加减乘除)
Aug 08 Javascript
js+css实现打字效果
Jun 24 Javascript
详解html-webpack-plugin插件(用法总结)
Sep 12 Javascript
基于vue-cli3创建libs库的实现方法
Dec 04 Javascript
如何在vue中使用jointjs过程解析
May 29 Javascript
js代码编写无缝轮播图
Sep 13 Javascript
javascript canvas封装动态时钟
Sep 30 Javascript
vue3.0搭配.net core实现文件上传组件
Oct 29 Javascript
解决VantUI popup 弹窗不弹出或无蒙层的问题
Nov 03 Javascript
jquery通过name属性取值的简单实现方法
Jun 20 #Javascript
jQuery模拟select实现下拉菜单功能
Jun 20 #Javascript
对jQuary选择器的全面总结
Jun 20 #Javascript
jQuery实现的可编辑表格完整实例
Jun 20 #Javascript
jQuery文件上传控件 Uploadify 详解
Jun 20 #Javascript
javascript js 操作数组 增删改查的简单实现
Jun 20 #Javascript
浅谈JavaScript中数组的增删改查
Jun 20 #Javascript
You might like
php实现当前页面点击下载文件的实例代码
2016/11/16 PHP
php实现通过stomp协议连接ActiveMQ操作示例
2020/02/23 PHP
php设计模式之模板模式实例分析【星际争霸游戏案例】
2020/03/24 PHP
JavaScript静态的动态
2006/09/18 Javascript
教您去掉ie网页加载进度条的方法
2010/12/09 Javascript
利用JS实现浏览器的title闪烁
2013/07/08 Javascript
浏览器窗口加载和大小改变事件示例
2014/02/27 Javascript
简单易用的倒计时js代码
2014/08/04 Javascript
Jquery实现弹性滑块滑动选择数值插件
2015/08/08 Javascript
javascript中类的定义方式详解(四种方式)
2015/12/22 Javascript
JavaScript事件 &quot;事件对象&quot;的注意要点
2016/01/14 Javascript
JS获取复选框的值,并传递到后台的实现方法
2016/05/30 Javascript
javascript实现简单的on事件绑定
2016/08/23 Javascript
Ajax+FormData+javascript实现无刷新表单信息提交
2016/10/24 Javascript
Bootstrap整体框架之JavaScript插件架构
2016/12/15 Javascript
原生js实现瀑布流布局
2017/03/08 Javascript
仿淘宝JSsearch搜索下拉深度用法
2018/01/15 Javascript
JS代码实现电脑配置检测功能
2018/03/21 Javascript
解决Vue2.0 watch对象属性变化监听不到的问题
2018/09/11 Javascript
详解如何使用koa实现socket.io官网的例子
2018/11/04 Javascript
nuxt静态部署打包相对路径操作
2020/11/06 Javascript
uni-app 自定义底部导航栏的实现
2020/12/11 Javascript
python实现俄罗斯方块游戏
2020/03/25 Python
用Django写天气预报查询网站
2018/10/21 Python
python 批量下载bilibili视频的gui程序
2020/11/20 Python
CSS3中利用animation属性创建雪花飘落特效
2014/05/14 HTML / CSS
Linux中如何设置Java环境变量(Ubuntu)
2016/07/24 面试题
通用C#笔试题附答案
2016/11/26 面试题
优秀毕业大学生推荐信
2013/11/13 职场文书
《最大的“书”》教学反思
2014/02/14 职场文书
学期评语大全
2014/04/30 职场文书
搞笑的获奖感言
2014/08/16 职场文书
2014年加油站站长工作总结
2014/12/23 职场文书
清明节寄语2015
2015/03/23 职场文书
学校清洁工岗位职责
2015/04/15 职场文书
Java生成日期时间存入Mysql数据库的实现方法
2022/03/03 Java/Android