## 全局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)