# 3. 开始的例子
我们从一个完整的例子开始认识 ng :
1 <!DOCTYPE html>
2 <html>
3 <head>
4 <meta charset="utf-8" />
5 6 <title>试验</title>
7 8 <script type="text/javascript" src="jquery-1.8.3.js"></script>
9 <script type="text/javascript" src="angular.js"></script>
1011 </head>
12 <body>
13 <div ng-controller="BoxCtrl">
14 <div style="width: 100px; height: 100px; background-color: red;"
15 ng-click="click()"></div>
16 <p>{{ w }} x {{ h }}</p>
17 <p>W: <input type="text" ng-model="w" /></p>
18 <p>H: <input type="text" ng-model="h" /></p>
19 </div>
202122 <script type="text/javascript" charset="utf-8">
232425 var BoxCtrl = function($scope, $element){
2627 //$element 就是一个 jQuery 对象
28 var e = $element.children().eq(0);
29 $scope.w = e.width();
30 $scope.h = e.height();
3132 $scope.click = function(){
33 $scope.w = parseInt($scope.w) + 10;
34 $scope.h = parseInt($scope.h) + 10;
35 }
3637 $scope.$watch('w',
38 function(to, from){
39 e.width(to);
40 }
41 );
4243 $scope.$watch('h',
44 function(to, from){
45 e.height(to);
46 }
47 );
48 }
4950 angular.bootstrap(document.documentElement);
51 </script>
52 </body>
53 </html>
从上面的代码中,我们看到在通常的 HTML 代码当中,引入了一些标记,这些就是 ng 的模板机制,它不光完成数据渲染的工作,还实现了数据绑定的功能。
同时,在 HTML 中的本身的 DOM 层级结构,被 ng 利用起来,直接作为它的内部机制中,上下文结构的判断依据。比如例子中 _p_ 是 _div_ 的子节点,那么 _p_ 中的那些模板标记就是在 _div_ 的 _Ctrl_ 的作用范围之内。
其它的,也同样写一些 js 代码,里面重要的是作一些数据的操作,事件的绑定定义等。这样,数据的变化就会和页面中的 DOM 表现联系起来。一旦这种联系建立起来,也即完成了我们所说的“双向绑定”。然后,这里说的“事件”,除了那些“点击”等通常的 DOM 事件之外,我们还更关注“数据变化”这个事件。
最后,可以使用:
angular.bootstrap(document.documentElement);
来把整个页面驱动起来了。(你可以看到一个可被控制大小的红色方块)
更完整的方法是定义一个 APP :
1 <!DOCTYPE html>
2 <html ng-app="MyApp">
3 <head>
4 <meta charset="utf-8" />
5 6 <title>数据正向绑定</title>
7 8 <script type="text/javascript" src="jquery-1.8.3.js"></script>
9 <script type="text/javascript" src="angular.js"></script>
1011 </head>
12 <body>
1314 <div ng-controller="TestCtrl">
15 <input type="text" value="" id="a" />
16 </div>
171819 <script type="text/javascript">
20 var TestCtrl = function(){
21 console.log('ok');
22 }
2324 //angular.bootstrap(document.documentElement);
25 angular.module('MyApp', [], function(){console.log('here')});
26 </script>
2728 </body>
29 </html>
这里说的一个 App 就是 _ng_ 概念中的一个 _Module_ 。对于 _Controller_ 来说, 如果不想使用全局函数,也可以在 app 中定义:
var app = angular.module('MyApp', [], function(){console.log('here')});
app.controller('TestCtrl',
function($scope){
console.log('ok');
}
);
上面我们使用 _ng-app_ 来指明要使用的 App ,这样的话可以把显式的初始化工作省了。一般完整的过程是:
var app = angular.module('Demo', [], angular.noop);
angular.bootstrap(document, ['Demo']);
使用 `angular.bootstrap` 来显示地做初始化工具,参数指明了根节点,装载的模块(可以是多个模块)。
- Introduction
- 关于AngularJS
- 关于本文档
- 开始的例子
- 依赖注入
- 作用域
- 数据绑定与模板
- 数据->模板
- 模板->数据
- 数据->模板->数据->模板
- 模板
- 定义模板内容
- 内容渲染控制
- 节点控制
- 事件绑定
- 表单控件
- 模板中的过滤器
- 排序 orderBy
- 过滤列表 filter
- 其它
- 例子:表头排序
- 例子:搜索
- 锚点路由
- 路由定义
- 参数定义
- 业务处理
- 定义模板变量标识标签
- AJAX
- HTTP请求
- 广义回调管理
- 工具函数
- 上下文绑定
- 对象处理
- 类型判定
- 其它服务
- 日志
- 缓存
- 计时器
- 表达式函数化
- 模板单独使用
- 自定义模块和服务
- 模块和服务的概念与关系
- 定义模块
- 定义服务
- 引入模块并使用服务
- 附加模块 ngResource
- 使用引入与整体概念
- 基本定义
- 基本使用
- 定义和使用时的占位量
- 实例
- AngularJS与其它框架的混用(jQuery, Dojo)
- 自定义过滤器
- 自定义指令directive
- 指令的使用
- 指令的执行过程
- 基本的自定义方法
- 属性值类型的自定义
- Compile的细节
- transclude的细节
- 把节点内容作为变量处理的类型
- 指令定义时的参数
- Attributes的细节
- 预定义的 NgModelController
- 预定义的 FormController
- 示例:文本框
- 示例:模板控制语句 for
- 示例:模板控制语句 if/else