angularjs compiler编译器

 Angular的HTML compiler允许开发者自定义新的HTML语法。compiler允许我们对任意HTML元素或属性,甚至是新的HTML标签、属性(如<beautiful girl=”cf”></beautiful >)附加行为。Angular将这些附加行为称为directives。

HTML有很多专门格式化静态文档的预定义HTML样式结构【告诉浏览器如何显示标记的内容】,假设某标签内容部分需要进行居中处理,我们仅仅需要在标签中添加属性
align="center"便可,这也就是声明式语言了。

但声明式语言也有其局限的地方,比如无法处理预定义范围之外的语法。而angular预先绑定一些对构建应用有帮助的directives【属性】,当然也可以构建自己独特的directive,而这些创建的directive将成为我们自己“特定领域语言”

还有这里需要注意的是,这些编译都仅仅发生生浏览器端,无需服务器和预编译过程。

二、接下来我们来详细的介绍下compiler

首先compiler为作为angular的一个服务,负责遍历DOM结构,寻找属性,其编译过程分为两步:

1.编译(compiler):遍历DOM节点树,返回一个链接函数

2.链接(link):将directives绑定到一个作用域中,创建一个实况视图(view),而作用域scope中只要发生一点点变化都会更新并显示与视图上,而任何用户对模版的改变都会体现在scope model(双向数据绑定),使得scope model可以反映正确的值

一些directives,诸如ng-repeat,会为每一个在集合(collection)中的元素复制一次特定的元素(组合)。编译和链接两个阶段,使性能得以提升。因为克隆出来的模版(template)只需要编译一次,然后为每一个集合中的元素进行一次链接(类似模版缓存)

三、directive

 Directive是一个行为,在编译过程中遇到特定的HTML结构时,它会被触发。Directives可以放置在元素的name、attribute、class甚至注释中。以下是几种引用ng-bind(一个内置directive)的方法:

<span ng-bind="exp"></span>

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

<ng-bind></ng-bind>

<!-- directive: ng-bind exp -->

 Directive只是一个当编译器在DOM中遇到时会执行的一个函数(function)。directive API文档中有详细讲解如何创建一个directive。

下面是一个样例,可以让一个元素跟你的鼠标玩躲猫猫……

<!DOCTYPE html>
<html lang="zh-cn" ng-app="HideAnkSeek">
<head>
    <meta charset="UTF-8">
    <title>躲猫猫</title>
    <style type="text/css">
        .ng-cloak {
            display: none;
        }
    </style>
</head>
<body>
<span class="ng-cloak" wildcat>一碰我就跑~~来点我啊~~</span>
<script src="../angular-1.0.1.js" type="text/javascript"></script>
<script type="text/javascript">
    angular.module("HideAnkSeek", []).directive("wildcat", function ($document) {
        var maxLeft = 400,maxTop = 300;
        var msg = ["我闪~~", "抓我呀~~~", "雅蠛蝶~~", "噢耶~~", "你真逊~!","就差那么一点点了!","继续吧~~总有一天我会累的"];
        return function (scope, element, attr) {
            element.css({
                "position":"absolute",
                "border":"1px solid green"
            });
            element.bind("mouseenter", function (event) {
                element.css({
                    "left":parseInt(Math.random() * 10000 % maxLeft) + "px",
                    "top":parseInt(Math.random() * 10000 % maxTop) + "px"
                }).text(msg[parseInt(Math.random() * 10000 % msg.length)]);
            }).bind("click",function (event) {
                        element.text("噢My Lady Gaga。。。被你逮到了。。。");
                        element.unbind("mouseenter");
                    });
        };
    });
</script>
</body>
</html>

Angular编译器(compiler)通过directives处理DOM,而不是通过处理字符串模版。处理结果是一个与scope model组合并生成实时模版的链接函数(linking function)。视图与scope model的绑定对我们来说是透明的。开发者无须为更新视图、model做任何动作。而且,因为没有使用innerHTML更新视图模版,所以用户输入不会被打断。此外,angular directives不仅可以绑定文本值,而且还可以是拥有行为的结构

angularjs compiler编译器,布布扣,bubuko.com

时间: 2024-12-05 12:05:41

angularjs compiler编译器的相关文章

AngularJS -- HTML 编译器

HTML Compiler Overview(HTML 编译器 概要) AngularJS 的HTML编译器允许开发人员教浏览器一些新的HTML语法.编译器还允许你去附加行为(包括你自定义的)到任何的HTML元素或者属性,甚至是你自己创建的新的HTML元素或者属性上去.是不是很强大,是不是很鸡冻啊? *^_^*    AngularJS会在扩展的指令中,去调用这些行为. 有很多时尚的声明式的方式去格式化HTML静态文档.比如,有个对象需要居中显示,我们不需要提供一个方法,告诉浏览器,当窗口变化的

ANGULARJS 动态编译添加到dom中

在使用angularjs 时,希望通过动态构建angular模版,再通过angular进行展示. 使用 方法如下: <html ng-app="app"> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <script src="assets/angular.min.js">

玩转轻巧型C/C++ IDE之C-Free(配置GCC、Visual C++、Borland C++编译器)

玩转轻巧型C/C++ IDE之C-Free(配置GCC.Visual C++.Borland C++编译器) 之前在写一点简单的C/C++代码时习惯了VC++6.0,但是由于在windows7下VC6.0存在兼容性问题,因此只好放弃.在尝试了众多C/C++IDE之后,本文来推荐几个轻量级的IDE,如果是做工程,在windows下当然是推荐VS. 目前大多数人在编写简单的C/C++代码时的工具选择主要有两种:1)一些文本编辑器(如vim.gedit.sublime.notepad++.editpl

AngularJS开发指南14:AngularJS的服务详解

服务是一种由服务器端带到客户端的特性,它由来已久.AngularJS应用中的服务是一些用依赖注入捆绑在一起的可替换的对象.服务是最常和依赖注入一起用的,它也是AngularJS中的关键特性. 接下来,我们详细讲解下$location服务. $location服务,解析地址栏中的URL(基于window.location),让你在应用代码中能获取到.改变地址栏中的URL会反应到$location服务中,反之亦然. $location服务: 暴露当前地址栏的URL,这样你就能 获取并监听URL. 改

IT软件开发中常用的英语词汇

Aabstract 抽象的abstract base class (ABC)抽象基类abstract class 抽象类abstraction 抽象.抽象物.抽象性access 存取.访问access function 访问函数access level访问级别account 账户action 动作activate 激活active 活动的actual parameter 实参adapter 适配器add-in 插件address 地址address space 地址空间ADO(ActiveX D

编译原理第六单元习题

获得更多资料欢迎进入我的网站或者 csdn或者博客园 这几篇关于编译原理的文章是,我学习中国科学技术大学<编译原理>时,所做的习题总结.之后会将这门课的所有习题补上,用于给大家参考: 题目要求 在这个题目中,你将完整的实现抽象语法树(包括数据结构的定义.语法树的生成等).首先,请下载我们提供的代码包: http://staff.ustc.edu.cn/~bjhua/mooc/ast.zip 代码的运行方式是: 首先生成语法分析器: $ bison exp.y 然后生成编译器: $ gcc ma

【转】编程词汇

很实用的编程英语词库,共收录一千五百余条词汇. 第一部分: application 应用程式 应用.应用程序 application framework 应用程式框架.应用框架 应用程序框架 architecture 架构.系统架构 体系结构 argument 引数(传给函式的值).叁见 parameter 叁数.实质叁数.实叁.自变量 array 阵列 数组 arrow operator arrow(箭头)运算子 箭头操作符 assembly 装配件 assembly language 组合语

计算机、程序和java概述(一)

CPU通常由两部分组成:控制器和算数/逻辑运算器 控制器用于控制和协调各个组件的工作.算术逻辑运算器用于数值运算和逻辑运算. 1MHz(兆赫) = 100万Hz 内存也称随机存储器(RAM). 操作系统的主要任务有: 控制和监视系统的活动 分配系统资源 安排操作的顺序 java application:应用程序是独立的程序,能够在任何有JVM的计算机上运行. java applet:   是一种特殊的Java程序,可以在web浏览器中直接运行. java servlet:   是一种特殊的Jav

SQLite内核研究

先从全局的角度把握SQLite内核各个模块的设计和功能.SQLite采用了层次化.模块化的设计,而这些使得它的可扩展性和可移植性非常强.而且SQLite的架构与通用DBMS的结构差别不是很大,所以它对于理解通用DBMS具有重要意义.SQLite的内核总的来说分为三个部分,虚拟机(Virtual Machine).Back-end(后端)和compiler(编译器). 1.虚拟机(Virtual Machine)VDBE是SQLite的核心,它的上层模块和下层模块都是本质上都是为它服务的.它的实现