acq-ng-metadata
Version:
Angular 2 decorators and utils for Angular 1.x
125 lines (89 loc) • 2.44 kB
Markdown
# Directive
Directive is represented in DOM as a `element attribute`, which consists from:
* controller
* no scope
> Directive should be used only for behavioral/extension purposes
Directive is registered via `` `directives` metadata or `bootstrap` 2nd (providers) argument or legacy `angular.directive`(deprecated)
**ES5**
```js
// clicker.directive.js
angular.module('clicker')
.directive('clickMe',clickMeDirective);
clickMeDirective.$inject = ['$log'];
function clickMeDirective($log){
return {
link: function postLink(scope,element,attrs){
var me = attrs['me'];
element
.on('click', function(event){
$log.info('you have clicked ' + me);
});
scope
.$on('$destroy', function(){
element.off('click');
});
}
};
}
```
```js
// clicker.js
angular.module('clicker',[]);
```
**TS + ng-metadata**
```typescript
// clicker.directive.ts
import { Directive, Inject, Input, HostListener } from 'ng-metadata/core';
export class ClickMeDirective {
constructor( private $log: ng.ILogService ) {}
name: string;
clickOnHostElement() {
this.$log.info('you have clicked ' + this.name);
}
}
```
```typescript
// app.component.ts
import { Component } from 'ng-metadata/core';
import { ClickMeDirective } from './clicker.directive';
export class AppComponent{
name = 'a girl, has no name';
}
```
---
**(DEPRECATED)TS + ng-metadata**
```typescript
// clicker.directive.ts
import {Directive,Inject,Input,HostListener} from 'ng-metadata/core';
export class ClickMe {
constructor(
private $log: ng.ILogService
) {}
me: string;
clickOnHostElement() {
this.$log.info('you have clicked ' + this.me);
}
}
```
```typescript
// clicker.ts
import * as angular from 'angular';
import {provide} from 'ng-metadata/core';
import {ClickMe} from './clicker.directive';
angular.module('clicker',[])
.directive( ...provide(ClickMe) );
```