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 相关文章推荐
javascript multibox 全选
Mar 22 Javascript
javascript获取web应用根目录的方法
Feb 12 Javascript
jquery动态改变form属性提交表单
Jun 03 Javascript
JSON.stringify转换JSON时日期时间不准确的解决方法
Aug 08 Javascript
jquery获取当前日期的方法
Jan 14 Javascript
AngularJS入门教程之数据绑定用法示例
Nov 01 Javascript
js获取元素下的第一级子元素的方法(推荐)
Mar 05 Javascript
JavaScript实现的可变动态数字键盘控件方式实例代码
Jul 15 Javascript
利用百度地图API获取当前位置信息的实例
Nov 06 Javascript
如何理解Vue的v-model指令的使用方法
Jul 19 Javascript
Vue项目history模式下微信分享爬坑总结
Mar 29 Javascript
VSCode插件安装完成后的配置(常用配置)
Aug 24 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编程中10个最常见的错误
2014/08/08 PHP
php数组去除空值函数分享
2015/02/02 PHP
php修改文件上传限制方法汇总
2015/04/07 PHP
在WordPress的文章编辑器中设置默认内容的方法
2015/12/29 PHP
JavaScript 字符串与数组转换函数[不用split与join]
2009/12/13 Javascript
修改jquery里的dialog对话框插件为框架页(iframe) 的方法
2010/09/14 Javascript
DD_belatedPNG,IE6下PNG透明解决方案(国外)
2010/12/06 Javascript
js获取html参数及向swf传递参数应用介绍
2013/02/18 Javascript
jquery.validate.js插件使用经验记录
2014/07/02 Javascript
兼容IE、firefox以及chrome的js获取时间(getFullYear)
2014/07/04 Javascript
BootStrap网页中代码显示用法详解
2016/10/21 Javascript
完美实现js焦点轮播效果(二)(图片可滚动)
2017/03/07 Javascript
JS中将多个逗号替换为一个逗号的实现代码
2017/06/23 Javascript
详解EasyUi控件中的Datagrid
2017/08/23 Javascript
karma+webpack搭建vue单元测试环境的方法示例
2018/05/24 Javascript
layui框架table 数据表格的方法级渲染详解
2018/08/19 Javascript
关于微信小程序map组件z-index的层级问题分析
2019/07/09 Javascript
多个vue子路由文件自动化合并的方法
2019/09/03 Javascript
如何在JS文件中获取Vue组件
2020/09/16 Javascript
python调用机器喇叭发出蜂鸣声(Beep)的方法
2015/03/23 Python
深入源码解析Python中的对象与类型
2015/12/11 Python
Python列表推导式与生成器表达式用法示例
2018/02/08 Python
python编程测试电脑开启最大线程数实例代码
2018/02/09 Python
opencv与numpy的图像基本操作
2019/03/08 Python
Python实现截取PDF文件中的几页代码实例
2019/03/11 Python
PythonWeb项目Django部署在Ubuntu18.04腾讯云主机上
2019/04/01 Python
django富文本编辑器的实现示例
2019/04/10 Python
python3 打印输出字典中特定的某个key的方法示例
2019/07/06 Python
python导入库的具体方法
2020/06/18 Python
Python如何在单元测试中给对象打补丁
2020/08/03 Python
戴森比利时官方网站:Dyson BE
2020/10/03 全球购物
工厂实习感言
2014/01/14 职场文书
中学生家长评语大全
2014/04/16 职场文书
争先创优演讲稿
2014/09/15 职场文书
2016年全国爱眼日宣传教育活动总结
2016/04/05 职场文书
Python 如何利用ffmpeg 处理视频素材
2021/11/27 Python