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 基础学习笔记之文档处理
May 29 Javascript
jquery 插件学习(四)
Aug 06 Javascript
jQuery cdn使用介绍
May 08 Javascript
基于SVG的web页面图形绘制API介绍及编程演示
Jun 28 Javascript
JS 对输入框进行限制(常用的都有)
Jul 30 Javascript
谈谈jQuery Ajax用法详解
Nov 27 Javascript
jQuery实现扑克正反面翻牌效果
Mar 10 Javascript
Vue使用高德地图搭建实时公交应用功能(地图 + 附近站点+线路详情 + 输入提示+换乘详情)
May 16 Javascript
JS正则表达式封装与使用操作示例
May 15 Javascript
vue-cli 项目打包完成后运行文件路径报错问题
Jul 19 Javascript
详解Vue.js和layui日期控件冲突问题解决办法
Jul 25 Javascript
简单聊聊Vue中的计算属性和属性侦听
Oct 05 Vue.js
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/12/06 PHP
解析array splice的移除数组中指定键的值,返回一个新的数组
2013/07/02 PHP
PHP+MySql+jQuery实现的&quot;顶&quot;和&quot;踩&quot;投票功能
2016/05/21 PHP
PHP中ID设置自增后不连续的原因分析及解决办法
2016/08/21 PHP
详解PHP中websocket的使用方法
2016/09/15 PHP
JavaScript 使用技巧精萃(.net html
2009/04/25 Javascript
WEB页子窗口(showModalDialog和showModelessDialog)使用说明
2009/10/25 Javascript
用JQuery在网页中实现分隔条功能的代码
2012/08/09 Javascript
js获得地址栏?问号后参数的方法
2013/08/08 Javascript
用Javascript获取页面元素的具体位置
2013/12/09 Javascript
js改变鼠标的形状和样式的方法
2014/03/31 Javascript
js统计录入文本框中字符的个数并加以限制不超过多少
2014/05/23 Javascript
干货分享:让你分分钟学会javascript闭包
2015/12/25 Javascript
jQuery+Pdo编写login登陆界面
2016/08/01 Javascript
vue.js指令和组件详细介绍及实例
2017/04/06 Javascript
jQuery 实现双击编辑表格功能
2017/06/19 jQuery
vue数据双向绑定的注意点
2017/06/23 Javascript
彻底搞懂JavaScript中的apply和call方法(必看)
2017/09/18 Javascript
JavaScript设计模式之建造者模式实例教程
2018/07/02 Javascript
create-react-app使用antd按需加载的样式无效问题的解决
2019/02/26 Javascript
利用vue-i18n实现多语言切换效果的方法
2019/06/19 Javascript
微信小程序之左右布局的实现代码
2019/12/13 Javascript
py中的目录与文件判别代码
2008/07/16 Python
Python的“二维”字典 (two-dimension dictionary)定义与实现方法
2016/04/27 Python
python 动态加载的实现方法
2017/12/22 Python
python与caffe改变通道顺序的方法
2018/08/04 Python
关于python多重赋值的小问题
2019/04/17 Python
python控制nao机器人身体动作实例详解
2019/04/29 Python
Python pandas对excel的操作实现示例
2020/07/21 Python
Python实现石头剪刀布游戏
2021/01/20 Python
英国领先的电子、技术和办公用品购物网站:Ebuyer
2018/04/04 全球购物
Lookfantastic阿联酋官网:英国知名美妆护肤购物网站
2020/05/26 全球购物
设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。
2014/12/30 面试题
2015年妇幼保健工作总结
2015/05/19 职场文书
如何避免mysql启动时错误及sock文件作用分析
2022/01/22 MySQL
详解Spring Security中的HttpBasic登录验证模式
2022/03/17 Java/Android