@unifiedfactory/ng-metadata
Version:
Angular 2 decorators and utils for Angular 1.x
116 lines (85 loc) • 2.34 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 an ``'s `declarations` metadata, or manually using `angular.directive` and `provide` (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.module.js
angular.module('clicker',[]);
```
**TS + ng-metadata**
```typescript
// clicker.directive.ts
import { Directive, Inject, Input, HostListener } from 'ng-metadata/core';
({
// we are using same camelCase name as Angular 2 although in template it needs to be dash case because Angular 1 compiler
selector: '[myClickMe]'
})
export class ClickMeDirective {
constructor( ('$log') private $log: ng.ILogService ) {}
() name: string;
('click')
clickOnHostElement() {
this.$log.info('you have clicked ' + this.name);
}
}
```
```typescript
// clicker.module.ts
import { NgModule } from 'ng-metadata/core';
import { ClickMeDirective } from './clicker.directive';
({
declarations: [ ClickMeDirective ]
})
export class ClickerModule {}
```
---
**(DEPRECATED) TS + ng-metadata using provide**
```typescript
// clicker.directive.ts
import { Directive, Inject, Input, HostListener } from 'ng-metadata/core';
({
selector: '[click-me]'
})
export class ClickMe {
constructor(
('$log') private $log: ng.ILogService
) {}
('@') me: string;
('click')
clickOnHostElement() {
this.$log.info('you have clicked ' + this.me);
}
}
```
```typescript
// clicker.module.ts
import * as angular from 'angular';
import { provide } from 'ng-metadata/core';
import { ClickMe } from './clicker.directive';
angular.module('clicker',[])
.directive( ...provide( ClickMe ) );
```