## 全局API
| API名称 | 说明 |
| :----: | :----: |
| element(element) | 获取指定选择器的元素 |
| copy(obj[, dst]) | 创建obj对象或数组的深拷贝。如果有dst参数,则它完全由obj的深拷贝覆盖 |
| equals(o1, o2) | 比较两个元素是否严格(===比较)相等 |
| extend(dst, obj) | 从obj对象复制所有属性到dst对象 |
| forEach(obj, iterator[, context]) | 遍历obj集合中的每个对象 |
| fromJson(json) | 从一个JSON字符串返回一个JavaScript对象 |
| toJson(obj, pretty) | 返回JavaScript对象的JSON字符串形式 |
| isArray(value) | 判断传入的value是否为数组,如果是返回 true。 |
| isDate(value) | 判断传入的value是否为Date对象,如果是返回true |
| isDefined(value) | 如果传入的value是一个已定义的对象,则返回true |
| isElement(value) | 判断传入的value是否为一个DOM元素对象或JQuery元素对象。如果是返回true |
| isFunction(value) | 判断传入的value是否为JavaScript函数,如果是返回true |
| isNumber(value) | 判断传入的value是否为数值,如果是返回true |
| isObject(value) | 判断传入的value是否是JavaScript对象,如果是返回true |
| isString(value) | 判断传入的value是否为String对象,如果是返回 true。 |
| isUndefined(value) | 判断传入的value是否定义,如果没有定义返回true |
| lowercase(value) | 转换字符串为小写 |
| uppercase(vlaue) | 转换字符串为大写 |
| bind(self, fn, args) | 返回一个新的函数,绑定这个函数的this指向self |
| noop() | 空函数 |
| module() | 定义一个模块 |
1.4+版本新增:
| API名称 | 说明 |
| :----: | :----: |
| merge(dst, obj) | merge()方法类似extend(),从obj对象复制所有属性到dst对象,不过它是深拷贝(对原对象的属性进行递归,执行一次深拷贝) |
| bootstrap() | 手动初始化angular |
| version | 返回AngularJS使用的版本属性 |
**(1)element()**
获取指定选择器的元素。
示例(19-1.html):
```
<div ng-controller="ParentController">
<span>item1</span>
<span>item2</span>
</div>
<script>
var myApp = angular.module('myApp', []);
myApp.controller('ParentController', ['$scope',
function($scope) {
console.log(angular.element(document.querySelectorAll('span')));
}]);
</script>
// [span, span]
```
**(2)copy()**
创建obj对象或数组的深拷贝。如果有dst参数,则它完全由obj的深拷贝覆盖。
语法:
```
copy(obj[, dst])
```
示例(19-2.html):
```
var person = {
name: 'angular',
age: '12'
};
var newObj = {};
var human = angular.copy(person, newObj);
console.log(human); // Object {name: "angular", age: "12"}
console.log(newObj); // Object {name: "angular", age: "12"}
```
**(3)equals()**
比较两个元素是否严格(===比较)相等。
示例(19-3.html):
```
console.log(angular.equals(1, 1)); // true
console.log(angular.equals(1, '1')); // false
```
**(4)extend()**
从obj对象复制所有属性到dst对象,返回拓展的对象:
```
angular.extend(dst, obj, obj2, ....);``
```
可传入多个参数,第一个是要扩展的对象,后面的对象是要拷贝的对象(浅拷贝,即如果后面的obj和dst包含同名属性且属性值是对象时,会直接完全覆盖)。
示例(19-4.html):
```
var dst = {};
var obj = {
name: 'js',
detail: {
a: 1
}
};
var obj2 = {
name: 'css',
detail: {
c: 2,
b: 3
}
};
console.log(angular.extend(dst, obj, obj2));
```
打印信息:
![](https://box.kancloud.cn/e0a48752038cfd0de410c2d3d6a7d4a6_182x106.png)
从上面的打印信息中,可以看到extend()方法是直接覆盖同名属性的。
**(5)forEach()**
遍历obj集合中的每个对象。
示例(19-5.html):
```
var person = {
name: 'angular',
age: '12'
};
angular.forEach(person,
function(value, key) {
console.log(key + ':' + value)
});
// name:angular
// age:12
var arr = ['a', 'b'];
angular.forEach(arr,
function(value, index) {
console.log(index + ':' + value);
console.log(this.age);
},
person);
// 0:a
// 12
// 1:b
// 12
```
**(6)fromJson()**
从一个JSON字符串返回一个JavaScript对象。
示例(19-6.html):
```
console.log(angular.fromJson('{"name":"angular","version":"1.6.1"}'));
// Object {name: "angular", version: "1.6.1"}
```
**(7)toJson()**
返回JavaScript对象的JSON字符串形式。
注:第二个参数可选,可为布尔型或数字,控制字符串输出格式
示例(19-7.html)
```
console.log(angular.toJson({name:"angular"}));
// {"name":"angular"}
console.log(angular.toJson({name:"angular"}, true));
//{
// "name": "angular"
//}
console.log(angular.toJson({name:"angular"}, 4));
//{
// "name": "angular"
//}
```
**(8)isArray()**
判断传入的value是否为数组,如果是返回 true。
示例:
```
angular.isArray(3); // false
angular.isArray([]); // true
```
**(9)isDate()**
判断传入的value是否为Date对象,如果是返回true
```
angular.isDate('2017-02-16'); // false
angular.isDate(new Date()); // true
```
**(10)isDefined()**
如果传入的value是一个已定义的对象,则返回true。
示例:
```
angular.isUndefined(undefined) // true
angular.isUndefined([]); // false
```
**(11)isElement()**
判断传入的value是否为一个DOM元素对象或JQuery元素对象。如果是返回true
**(12)isFunction()**
判断传入的value是否为JavaScript函数,如果是返回true。
示例:
```
angular.isFunction(function() {}); // true
angular.isFunction([]); // false
```
**(13)isNumber()**
判断传入的value是否为数值,如果是返回true。
示例:
```
angular.isNumber(1); // true
angular.isNumber('a'); // false
angular.isNumber(new Number(1)); // false
angular.isNumber(Number(4)); // true
```
**(14)isObject()**
判断传入的value是否是JavaScript对象,如果是返回true
示例:
```
angular.isObject([]); // true
angular.isObject(null); // false
```
**(15)isString()**
判断传入的value是否为String对象,如果是返回 true。
示例:
```
angular.isString(1); // false
angular.isString('a'); // true
angular.isString(new String('a')); // false
angular.isString(String('a')); // true
```
**(16)isUndefined()**
判断传入的value是否定义,如果没有定义返回true。
示例:
```
angular.isUndefined(undefined) // true
angular.isUndefined(1); // false
```
**(17)lowercase()**
转换字符串为小写.
示例:
```
angular.lowercase('AbC'); // abc
```
**(18)uppercase()**
转换字符串为大写。
示例:
```
angular.uppercase('aBc'); // ABC
```
**(19)bind()**
类似js的bind,返回一个新的函数,绑定这个函数的this指向self。
示例(19-8.html):
```
var obj = {
age: 12,
test: function(name) {
console.log(name + ':' + this.age);
}
};
var self = {
age: 10
};
var fn = angular.bind(self, obj.test, 'angular');
fn();
// angular:10
```
注意:bind会根据你的参数类型来决定调用call或apply,所以args可以是一个个数据,也可以是一个数组:
```
var fn = angular.bind(self, obj.test, ['angular']);
fn();
// angular:10
```
注意:bind()最后返回来的是一个函数(类似JS的bind())。
**(20)noop()**
noop()返回一个空函数。
当某些时候你需要传入函数参数,而且希望它什么也不做的时候,你可以使用该函数,也无需再新建一个空的函数。
示例:
```
var fn = angular.noop();
```
**(21)module()**
module()方法用来定义一个模块。
```
var myApp = angular.module('myApp', []);
```
**1.4+版本新增**
**(22)merge()**
merge()方法类似extend(),不过它是深拷贝:
```
angular.merge(dst, obj, obj2...);
```
实例(19-9.html):
```
var dst = {};
var obj = {
name: 'js',
detail: {
a: 1
}
};
var obj2 = {
name: 'css',
detail: {
c: 2,
b: 3
}
};
console.log(angular.merge(dst, obj, obj2));
```
打印信息:
![](https://box.kancloud.cn/546355414842db1de9c9a47e5dbc95fc_162x123.png)
从打印信息中可以看出,merge()方法会对要拷贝的对象中的同名属性进行一一拷贝,而不是像extend()一样直接覆盖。
**(23)bootstrap()**
angular.bootstrap()方法用于手动初始化angular。
注:这个函数会自动检测创建的module有没有被加载多次,如果有则会在浏览器的控制台打出警告日志,并且不会再次加载。这样可以避免在程序运行过程中许多奇怪的问题发生。
语法:
```
angular.bootstrap(element, [modules], [config]);
```
参数说明:
- element DOM元素,作为angular的根元素
- modules:modules的一个数组,这里的module可以是用户事先定义好的module或者是注入已有的function。
- config:拥有配置的对象。支持的配置如下:
- strictDi - 禁用angular函数的注解, 一般拥有debug. 默认值是false.
此方法返回最新创建的injector。
一般我们是这样启动angular的:
```
<html ng-app>
```
但如果你省略了`ng-app`指令,那你就需要手动启动angular了。
实例(19-10.html):
```
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<script src="../resources/angular/angular.min.js"></script>
</head>
<body>
<div ng-controller="TestController">
{{ name }}
</div>
<script>
var myApp = angular.module('myApp', []);
myApp.controller('TestController', ['$scope', function($scope) {
$scope.name = 'angular';
}]);
angular.bootstrap(document, ['myApp']);
</script>
</body>
</html>
```
在这个例子中,我们并没有添加`ng-app`指令来启动angular,而是使用`angular.bootstrap()`方法来启动(你可以试试注释掉最后一行看看效果)。
**(24)version**
返回AngularJS使用的版本属性:
```
angular.version
```
- full:字符串型
- major:数字型
- minor:数字型
- dot:数字型
- codeName:字符串型
实例(19-11.html):
```
console.log(angular.version);
```
打印信息:
![](https://box.kancloud.cn/07f7473af1b7a8409da0d9a85642b411_250x103.png)
- 前言
- 第一章:AngularJS简介
- 第二章:模块
- 模块的使用
- AngularJS 生命周期
- 第三章:控制器
- 第四章:作用域
- 作用域解析
- $watch和$apply
- $scope的生命周期
- 第五章:过滤器
- 内置的过滤器
- 自定义过滤器
- 第六章:表达式
- 简单的表达式
- 手动解析表达式
- 插值字符串
- 第七章:指令
- 内置指令
- 自定义指令
- 第八章:组件
- 组件的使用
- 组件的生命周期
- 第九章:模板
- 第十章:依赖注入
- 第十一章:表单
- 表单验证
- ngMessages
- 第十二章:MVC模式
- 第十三章:Service服务
- 内置的服务
- 自定义服务
- 第十四章:与服务端交互
- 简单的交互
- 跨域请求
- Angular缓存
- 强大的promise
- 第十五章:路由
- 模板
- 路由使用
- 路由模式
- 路由事件
- $location
- ui.router
- 第十六章:动画
- 入门级动画
- 自定义动画
- $animate API
- $animateCss
- 第十七章:事件
- 第十八章:angular.element
- 第十九章:全局API
- 第二十章:开发技巧及注意点
- AngularJS和IE
- 第二十一章:为Angular2留坑
- 第二十二章:Angular2 简介
- 第二十三章:Angular2 开发环境搭建
- 第二十四章:Angular2 TypeScript
- 第二十五章:Angular2 模块(module)
- 模块的元数据
- 特性模块
- 第二十六章:Angular2 组件(component)
- 组件的元数据
- 组件的样式
- 组件之间的通信
- 生命周期
- DOM操作
- 第二十七章:Angular2 装饰器和元数据
- 元数据
- 装饰器
- 第二十八章:Angular2 表单(form)
- 模板驱动的表单
- 模型驱动的表单
- 自定义验证器
- 第二十九章:Angular2 事件(event)
- 第三十章:Angular2 模板(template)
- 第三十一章:Angular2 指令(directive)
- 常用内置指令
- 结构型指令
- 属性型指令
- 第三十二章:Angular2 数据绑定(data binding)
- 第三十三章:Angular2 依赖注入(injection)
- 第三十四章:Angular2 服务(service)
- 第三十五章:Angular2 路由(route)
- 路由器部件
- 第三十六章:Angular2 HTTP通信
- 第三十七章:Angular2 管道(pipe)
- 内置管道
- 自定义管道
- 第三十八章:Angular2 动画(animate)
- 动画的实现
- 路由动画
- 第三十九章:案例实战
- 附录:源码下载
- 附录:问题及解决方法