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 相关文章推荐
根据判断浏览器类型屏幕分辨率自动调用不同CSS的代码
Feb 22 Javascript
基于jQuery的输入框在光标位置插入内容, 并选中
Oct 29 Javascript
Javascript获取HTML静态页面参数传递值示例
Aug 18 Javascript
js禁止页面刷新禁止用F5键刷新禁止右键的示例代码
Sep 23 Javascript
jquery的ajax异步请求接收返回json数据实例
Jun 16 Javascript
jquery实现页面常用的返回顶部效果
Mar 04 Javascript
js控制TR的显示隐藏
Mar 04 Javascript
javascript实现方法调用与方法触发小结
Mar 26 Javascript
Javascript封装id、class与元素选择器方法示例
Mar 13 Javascript
layui实现左侧菜单点击右侧内容区显示
Jul 26 Javascript
JavaScript实现HSL拾色器
May 21 Javascript
jquery轮播图插件使用方法详解
Jul 31 jQuery
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
浅析ThinkPHP的模板输出功能
2014/07/01 PHP
win7 64位系统 配置php最新版开发环境(php+Apache+mysql)
2014/08/15 PHP
PHP命名空间(namespace)原理与用法详解
2019/12/11 PHP
在js文件中如何获取basePath处理js路径问题
2013/07/10 Javascript
jQuery 的全选(全非选)即取得被选中的值使用介绍
2013/11/12 Javascript
addEventListener 的用法示例介绍
2014/05/07 Javascript
jQuery操作基本控件方法实例分析
2015/12/31 Javascript
实现JavaScript的组成----BOM和DOM详解
2016/05/18 Javascript
AngularJS基础 ng-disabled 指令详解及简单示例
2016/08/01 Javascript
jquery select2的使用心得(推荐)
2016/12/04 Javascript
浅谈jQuery中的$.extend方法来扩展JSON对象
2017/02/12 Javascript
基于JavaScript实现图片剪切效果
2017/03/07 Javascript
JS 组件系列之BootstrapTable的treegrid功能
2017/06/16 Javascript
详解vue.js的事件处理器v-on:click
2017/06/27 Javascript
pm2 部署 node的三种方法示例
2017/10/20 Javascript
webpack将js打包后的map文件详解
2018/02/22 Javascript
使用pkg打包Node.js应用的方法步骤
2018/10/19 Javascript
详解如何构建Promise队列实现异步函数顺序执行
2018/10/23 Javascript
JavaScript常见继承模式实例小结
2019/01/11 Javascript
如何在微信小程序中使用骨架屏的步骤
2020/06/12 Javascript
vue实现虚拟列表功能的代码
2020/07/28 Javascript
nodejs使用Sequelize框架操作数据库的实现
2020/10/21 NodeJs
Node.js文本文件BOM头的去除方法
2020/11/22 Javascript
搞笑的程序猿:看看你是哪种Python程序员
2015/06/12 Python
Pycharm 创建 Django admin 用户名和密码的实例
2018/05/30 Python
python3用urllib抓取贴吧邮箱和QQ实例
2020/03/10 Python
HTML5和CSS3让网页设计提升到下一个高度
2009/08/14 HTML / CSS
就业意向书范文
2014/04/01 职场文书
长城导游词300字
2015/01/30 职场文书
测量员岗位职责
2015/02/14 职场文书
2015年感恩母亲节的演讲稿
2015/03/18 职场文书
2015年教师业务工作总结
2015/05/26 职场文书
python使用pygame创建精灵Sprite
2021/04/06 Python
vue如何批量引入组件、注册和使用详解
2021/05/12 Vue.js
Django集成富文本编辑器summernote的实现步骤
2021/05/31 Python
Java Spring Boot请求方式与请求映射过程分析
2022/06/25 Java/Android