AngularJS的核心对象angular上的方法全面解析(AngularJS全局API)

总结一下AngularJS的核心对象angular上的方法,也帮助本身学习一下平时工做中没怎么用到的方法,看能不能提升开发效率。我当前使用的Angularjs版本是1.5.5也是目前最新的稳定版本,不过在全局API上,版本不一样也没什么区别。html

AngularJS 全局 API列表

  • elementjquery

  • bootstrapgit

  • copygithub

  • extendbootstrap

  • merge数组

  • equalsapp

  • forEachide

  • noop函数

  • bindoop

  • 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的版本

相关文章
相关标签/搜索