总结一下AngularJS的中心对象angular上的要领,也协助自身进修一下日常平凡工作中没怎么用到的要领,看能不能进步开辟效力。我当前运用的Angularjs版本是1.5.5也是现在最新的稳固版本,不过在全局API上,版本差别也没什么区分。
AngularJS 全局 API列表
element
bootstrap
copy
extend
merge
equals
forEach
noop
bind
toJson
fromJson
identity
isUndefined
isDefined
isString
isFunction
isObject
isNumber
isElement
isArray
version
isDate
lowercase
uppercase
module
angular.forEach
forEach(obj, iterator)
遍历obj(可所以对象,也可所以数组)对象,并顺次挪用iterator(value, key, obj)函数。
个中iterator函数,吸收的三个参数分别为
value: 对象的属性(数组元素)
key: 对象的属性名(数组的索引)
obj: 数组(对象)自身
例子:
var list = ['小明', '小毛', '小周', '小蕾'];
angular.forEach(list, function (val, key) {
console.log(key + '号同砚:' + val);
})
var obj = {
name: '吴登广',
age: '21',
title: 'worker'
}
angular.forEach(obj, function (val, key) {
console.log(key + ':' + val);
})
结果:
angular.module
这个要领人人应当都很熟习了
module(name, requires),name为模块名,requires(可选)为依靠的模块,当有依靠的模块数组的时刻,示意注册一个模块,没偶然为援用一个模块。
例子:
angular.module('main', []);
console.log(angular.module('main'));
结果:
angular.element
这个要领是用来操纵DOM的,平常在指令内里运用。
在引入了jquery的状况下,运用要领和jquery险些一样,相当于一个语法糖。
var ele = angular.element('h1');
console.log(ele.html());
在没有引入jquery的状况下,运用的实际上是jqLite(angular自身封装的相似于jquery的一个东西),运用要领也相似,只不过不支持一些jquery的选择器。
var ele = angular.element(document.getElementsByTagName('h1')[0]);
console.log(ele.html());
至于用jqLite猎取到的封装事后的DOM节点和jquery的有点不太一样,这里能够参考一篇文章。
angular.bootstrap
这个函数不太经常使用。假如你不想运用ng-app指令来启动angular运用的话,能够用angular.bootstrap()来启动
angular.element(document).ready(function() {
angular.bootstrap(document, []);
});
须要依靠的模块数组做为参数。
angular.toJson
实在就是挪用JSON.stringify()要领将一个对象或数组,花样化为JSON字符串。
angular.fromJSON
就是挪用JSON.parse()要领将一个JSON字符串转换为一个对象
例子:
var user = {
name: 'Jax2000',
age: 21,
title: 'worker'
}
user = angular.toJson(user)
console.log(user);
user = angular.fromJson(user);
console.log(user);
结果:
angular.copy
copy(source, destination)
深复制一个对象或许数组,这是一个异常有用的要领,熟习js的人都应当晓得,js中 = 操纵符,实际上复制的是指针,所以前后两个变量指向的照样内存中的同一个对象,所以我们在个中一个变量上操纵该对象时,对别的一个变量也会见效,偶然刻我们并不愿望涌现这类状况。然后angular.copy要领就是深复制,会在内存中再天生一个对象,两个变量就能够自力,相互不产生影响。
吸收一个必需参数source,和一个可选参数destination
var user1 = {
name: 'wudengguang',
age: 21,
title: 'worker'
}
var user2 = user1;
var user3 = angular.copy(user1);
var user4 = {};
// 注重这个user4必需是一个对象或许数组
angular.copy(user1, user4);
user1.name = 'liulei';
console.log('user1:' + user1.name);
console.log('user2:' + user2.name);
console.log('user3:' + user3.name);
console.log('user4:' + user4.name);
结果:
能够看到转变user1的name字段以后,浅复制的user2受到了影响,而深复制的user3和user4没有受到影响
angular.extend
extend(destination, src1, src2…)
这个要领是用来扩大对象的,destination为要扩大的对象,会将背面的对象的属性悉数复制到destination中,不过是浅复制
var user1 = {
name: 'Jax2000',
age: 21,
}
var user2 = {
age: 22,
skill: {}
}
var dst = {};
angular.extend(dst, user1, user2);
console.log(dst);
console.log(dst.skill === user2.skill);
angular. merge
这个要领和extend要领是一样的,也是用来扩大目的对象的,不过用的是深复制
var user1 = {
name: 'Jax2000',
age: 21,
}
var user2 = {
age: 22,
skill: {}
}
var dst = {};
angular.merge(dst, user1, user2);
console.log(dst);
console.log(dst.skill === user2.skill);
merge和extend经常使用于猎取存储在服务端的用户设置,然后须要和当地的连系的这一类案例。假如关于copy,extend,merge的区分还不是很相识的话,能够看这篇文章。
angular.equals
equals(o1, o2)
见文知意,推断两个对象或许值是不是相称,个中对象只如果属性都想同即可。
var user1 = {
name: 'Jax2000',
age: 21,
}
var user2 = {
age: 21,
name: 'Jax2000'
}
console.log(angular.equals(user1, user2));
结果是true
angular.noop
这个要领直接看源代码就晓得了
function noop() {}
我也不是很清晰,这个东西干吗的,多是有些函数须要回调函数做为参数,在没偶然挪用的吧,官方的文档案例:
function foo(callback) {
var result = calculateResult();
(callback || angular.noop)(result);
}
angular.bind
这个要领就是返回一个有特定作用域的函数对象
angular.bind(self, fn, args)
self: 函数的作用域
fn: 须要转变作用域的函数
args: 须要通报给该函数的参数数组
var user1 = {
name: 'Jax',
age: 21,
}
var user2 = {
age: 21,
name: 'Scarlett'
}
function sayName(user) {
console.log(this.name, user.name);
}
var _sayName = angular.bind(user1, sayName, user2);
_sayName();
结果就是打印出了 Jax Scarlett
angular.identity
该函数也很简单,就是返回这个函数吸收到的第一个参数
例子也用官方的例子好了
function getResult(fn, input) {
return (fn || angular.identity)(input);
};
getResult(function(n) { return n * 2; }, 21); // returns 42
getResult(null, 21); // returns 21
getResult(undefined, 21); // returns 21
angular.isUndefined
推断传入的参数是不是为undefined
console.log(angular.isUndefined(undefined)); // true
console.log(angular.isUndefined(null)); // false
angular.isDefined
推断传入进来的参数是不是不是undefined
console.log(angular.isDefined(undefined)); // false
console.log(angular.isDefined(null)); // true
angular.isString
推断传入进来的参数是不是为字符串
console.log(angular.isString('123')); // true
console.log(angular.isString(123)); // false
angular.isNumber
推断传进来的参数是不是为number范例
console.log(angular.isNumber('123')); // false
console.log(angular.isNumber(123)); // true
angular.isFunction
推断通报进来的参数是不是为一个函数
console.log(angular.isFunction(fn)); // true
console.log(angular.isFunction(fn())); // false
angular.isObject
推断通报进来的参数是不是为对象(null 除外)
console.log(angular.isObject({})); // true
console.log(angular.isObject(null)); // false
console.log(angular.isObject(123)); // false
angular.isArray
就是Array.isArray
推断传入进来的参数是不是为数组
console.log(angular.isArray([])); // true
console.log(angular.isArray(null)); // false
angular.isElement
推断通报进来的参数是不是为一个DOM节点(被jquery扩大过的也可)
var body = angular.element(document.getElementsByTagName('body')[0]);
console.log(angular.isElement(body)); // true
angular.isDate
推断通报进来的对象是不是为Date范例
console.log(angular.isDate(new Date())); // true
angular.lowercase
将一个字符串转换为小写
angular.upercase
将一个字符串转换为小写
console.log(angular.lowercase('ABCD')); // abcd
console.log(angular.uppercase('abcd')); // ABCD
angular.version
这是一个属性,返回angular的版本