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 相关文章推荐
实现局部遮罩与关闭原理及代码
Feb 04 Javascript
『jQuery』取指定url格式及分割函数应用
Apr 22 Javascript
JavaScript实现复制功能各浏览器支持情况实测
Jul 18 Javascript
js使用ajax读博客rss示例
May 06 Javascript
jquery 获取 outerHtml 包含当前节点本身的代码
Oct 30 Javascript
Javascript检查图片大小不要让大图片撑破页面
Nov 04 Javascript
JavaScript观察者模式(经典)
Dec 09 Javascript
使用JavaScript实现点击循环切换图片效果
Sep 03 Javascript
在vue中获取token,并将token写进header的方法
Sep 26 Javascript
通过实践编写优雅的JavaScript代码
May 30 Javascript
150行Node.js实现的dns代理工具
Aug 02 Javascript
vue使用codemirror的两种用法
Aug 27 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中文本数据翻页(留言本翻页)
2006/10/09 PHP
Codeigniter框架实现获取分页数据和总条数的方法
2014/12/05 PHP
php里array_work用法实例分析
2015/07/13 PHP
yii2中使用Active Record模式的方法
2016/01/09 PHP
php实现在线通讯录功能(附源码)
2016/05/13 PHP
PhpStorm 如何优雅的调试Hyperf的方法步骤
2019/11/24 PHP
javascript学习随笔(使用window和frame)的技巧
2007/03/08 Javascript
漂亮的提示信息(带箭头)
2007/03/21 Javascript
js弹出层之1:JQuery.Boxy (二)
2011/10/06 Javascript
jquery $.trim()方法使用介绍
2014/05/21 Javascript
javascript拖拽效果延伸学习
2016/04/04 Javascript
判断是否存在子节点的实现代码
2016/05/18 Javascript
几句话带你理解JS中的this、闭包、原型链
2016/09/26 Javascript
javascript的函数劫持浅析
2016/09/26 Javascript
js/jquery控制页面动态加载数据 滑动滚动条自动加载事件的方法
2017/02/08 Javascript
Bootstrap进度条学习使用
2017/02/09 Javascript
weui框架实现上传、预览和删除图片功能代码
2017/08/24 Javascript
微信小程序中实现手指缩放图片的示例代码
2018/03/13 Javascript
vue awesome swiper异步加载数据出现的bug问题
2018/07/03 Javascript
JS this关键字在ajax中使用出现问题解决方案
2020/07/17 Javascript
[00:18]天涯墨客三技能展示
2018/08/25 DOTA
浅析Python中的join()方法的使用
2015/05/19 Python
Python 安装setuptools和pip工具操作方法(必看)
2017/05/22 Python
Python实现定时备份mysql数据库并把备份数据库邮件发送
2018/03/08 Python
Flask框架响应、调度方法和蓝图操作实例分析
2018/07/24 Python
Python OpenCV中的resize()函数的使用
2019/06/20 Python
python多线程+代理池爬取天天基金网、股票数据过程解析
2019/08/13 Python
Pycharm自带Git实现版本管理的方法步骤
2020/09/18 Python
python 进程池pool使用详解
2020/10/15 Python
以实惠的价格轻松租车,免费取消:Easyrentcars
2019/07/16 全球购物
博士生入学考试推荐信
2013/11/17 职场文书
物流仓储计划书
2014/01/10 职场文书
餐饮采购员岗位职责
2014/03/15 职场文书
学生干部培训方案
2014/06/12 职场文书
学雷锋活动简报
2015/07/20 职场文书
Nginx静态压缩和代码压缩提高访问速度详解
2022/05/30 Servers