import {Renderer, ElementRef, Component, Directive, Injectable} from '@angular/core'; import {StringWrapper} from '@angular/core/src/facade/lang'; // A service available to the Injector, used by the HelloCmp component. @Injectable() export class GreetingService { greeting: string = 'hello'; } // Directives are light-weight. They don't allow new // expression contexts (use @Component for those needs). @Directive({selector: '[red]'}) class RedDec { // ElementRef is always injectable and it wraps the element on which the // directive was found by the compiler. constructor(el: ElementRef, renderer: Renderer) { renderer.setElementStyle(el.nativeElement, 'color', 'red'); } // constructor(renderer: Renderer) {} } // Angular 2.0 supports 2 basic types of directives: // - Component - the basic building blocks of Angular 2.0 apps. Backed by // ShadowDom.(http://www.html5rocks.com/en/tutorials/webcomponents/shadowdom/) // - Directive - add behavior to existing elements. @Component({ // The Selector prop tells Angular on which elements to instantiate this // class. The syntax supported is a basic subset of CSS selectors, for example // 'element', '[attr]', [attr=foo]', etc. selector: 'hello-app', // These are services that would be created if a class in the component's // template tries to inject them. viewProviders: [GreetingService], // The template for the component. // Expressions in the template (like {{greeting}}) are evaluated in the // context of the HelloCmp class below. template: `
{{greeting}} world!
{{lastKey}}

`, // All directives used in the template need to be specified. This allows for // modularity (RedDec can only be used in this template) // and better tooling (the template can be invalidated if the attribute is // misspelled). directives: [RedDec] }) export class HelloCmp { greeting: string; lastKey: string = '(none)'; constructor(service: GreetingService) { this.greeting = service.greeting; } changeGreeting(): void { this.greeting = 'howdy'; } onKeyDown(event: any /** TODO #9100 */): void { this.lastKey = StringWrapper.fromCharCode(event.keyCode); } }