转:angular的decorator方法
AngularJS实例 – 装饰$log
在AngularJS中,我们可以使用Angular内置或者自定义的services,在应用的各个部分之间分享数据和方法。假设你已经定义了一个service,但是在使用了一段时间之后又想要为这个service添加一些功能怎么办?方法之一当然是修改这个service的定义,直接在源码上动刀子。但是现在很多项目都需要通过团队协作来完成,直接修改别人的代码可能需要花费不少功夫,同时还要防范“牵一发而动全身”的风险。更进一步,如果你想给一些Angular内置的service添加功能怎么办,难道要我直接阅读angular.js的源码么?
当然,我们不需要去做以上这些事情,因为我们有更好的解决办法。Angular为我们提供了一种非常简单而优雅的方式来为service添加功能,它就是Angular中的decorator。有了它我们可以非常轻松的实现我们的目的。在一面的代码中,我们将对Angular内置service $log进行装饰,让它在每次被调用时除了自身接受的参数之外,还能在参数前面输出一个当前的时间戳。具体实现如下:
angular.module('myapp',[])
.config(function($provide){
$provide.decorator('$log',function($delegate){
angular.foreach(['log','debug','info','warn','error'],function(o){
$delegate[o] = decoratorLogger($delegate[o]);
});
function decoratorLogger(orignalFn){
return function(){
var args = Array.prototype.slice(arguments);
args.unshift(new Date().toISPString());
originalFn.apply(null,args);
};
}
});
});
上面的代码很简单,没有什么难点,关键的地方是在于decorator方法的回调函数的参数$delegate,它是decorator第一个参数代表的service的引用。现在我们就可以来验证一下刚才的进行装饰的$log service,在控制台中运行下面代码:
angular.element(document).injector().get('$log').log('hello')
结果输出:
2014-03-05T15:43:29.974Z hello
成功!
转:angular的decorator方法的更多相关文章
- angular 封装公共方法
angular封装公共方法到service中间件,节省开发时间 layer.service.ts openAlert(callback) {// 传递回调函数 const dialogRef = th ...
- AngularJS的核心对象angular上的方法全面解析(AngularJS全局API)
总结一下AngularJS的核心对象angular上的方法,也帮助自己学习一下平时工作中没怎么用到的方法,看能不能提高开发效率.我当前使用的Angularjs版本是1.5.5也是目前最新的稳定版本,不 ...
- 细说angular Form addControl方法
在本篇博文中,我们将接触angular的验证.angular的验证是由form 指令和ngModel协调完成的.今天博主在这里想要说的是在验证在的一种特殊情况,当验证控件没有没有name属性这是不会被 ...
- angular的工具方法笔记(equals, HashKey)
分别是angular脏值检测的工具方法equals和 类HashKey的使用方法 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transi ...
- angular.foreach 循环方法使用指南
angular有自己的生命周期.循环给一个 angular监听的变量复值时.最好还是用angular自带的循环方法.“angular.foreach” },{a:}]; angular.forEach ...
- angular之$watch方法详解
在$apply方法中提到过脏检查,首先apply方法会触发evel方法,当evel方法解析成功后,会去触发digest方法,digest方法会触发watch方法. (1)$watch简介 在diges ...
- [Angular] Angular Attribute Decorator - When to use it?
When we pass value to a component, normally we use @Input. <my-comp [courses]="(courses$ | a ...
- [转]angular之$apply()方法
这几天,根据buddy指定的任务,要分享一点angular JS的东西.对于一个在前端属于纯新手的我来说,Javascript都还是一知半解,要想直接上手angular JS,遇到的阻力还真是不少.不 ...
- ionic准备之angular基础——run方法(4)
可以看到整个angular.module对象具有以下各种属性和方法 <!DOCTYPE html> <html lang="en"> <head> ...
随机推荐
- TreeSet类的排序问题
http://www.cnblogs.com/lixiaolun/archive/2012/12/25/2832775.html TreeSet支持两种排序方法:自然排序和定制排序.TreeSet默 ...
- C语言,如何产生随机数
1. 基本函数 在C语言中取随机数所需要的函数是: int rand(void);void srand (unsigned int n); rand()函数和srand()函数被声明在头文件stdli ...
- JVM学习之常用概念
方法区 当JVM使用类装载器装载某个类时,它首先要定位对应的class文件,然后读入这个class文件,最后,JVM提取该文件的内容信息,并将这些信息存储到方法区,最后返回一个class实例. ...
- J2SE知识点摘记(二十六)
为了用“集合框架”的额外部分把排序支持添加到 Java 2 SDK,版本 1.2,核心 Java 库作了许多更改.像 String 和 Integer 类如今实现 Comparable 接口以提供自然 ...
- Windows平台内核级文件访问
1.背景 在windows平台下,应用程序通常使用API函数来进行文件访问,创建,打开,读写文件.从kernel32的CreateFile/ReadFile/WriteFile函数,到本地系统 ...
- java.util.Timer分析源码了解原理
Timer中最主要由三个部分组成: 任务 TimerTask . 任务队列: TaskQueue queue 和 任务调试者:TimerThread thread 他们之间的关系可以通过下面图示: ...
- 《我是一只IT小小鸟》 读后感
<我是一只IT小小鸟>一只是我想读list中一个本,但是上次去当当买的时候,竟然缺货了...昨天监考,实在无聊,就上网看电子书了,一天就看完了,看得有点仓促,所以理解估计不深. 1.刘帅: ...
- DELL服务器安装Windows server 2003---解决找不到安装在计算机上的硬盘驱动器 安装无法
安装Windows server 2003系统,本以为改改BIOS配置“改为从光驱启动优先”很容易搞定的.没想到系统安装过程中碰到“找不到安装在计算机上的硬盘驱动器安装无法继续,要退出请按F3”问题, ...
- poj1651 最优矩阵乘法动态规划解题
题目描述: 有若干个矩阵{Ai},元素都为整数且已知矩阵大小. 如果要计算所有矩阵的乘积A1 * A2 * A3 .. Am,最少要多少次整数乘法? 输入 第一行一个整数n(n <= 100), ...
- 用showModalDialog写的简单弹出框传参与反参
vReturnValue = window.showModalDialog(sURL [, vArguments] [,sFeatures]) sURL -- 必选参数,类型:字符串.用来指定对话框要 ...