Host binding and Host listening

前端 未结 2 448
余生分开走
余生分开走 2020-12-12 22:20

How to use the host listener and host binding in angular 2? I tried like the below for host listener, but it\'s always showing a Declaration expected error.

相关标签:
2条回答
  • 2020-12-12 22:57

    This is the simple example to use both of them:

    import {
      Directive, HostListener, HostBinding
    }
    from '@angular/core';
    
    @Directive({
      selector: '[Highlight]'
    })
    export class HighlightDirective {
      @HostListener('mouseenter') mouseover() {
        this.backgroundColor = 'green';
      };
    
      @HostListener('mouseleave') mouseleave() {
        this.backgroundColor = 'white';
      }
    
      @HostBinding('style.backgroundColor') get setColor() {
         return this.backgroundColor;
      };
    
      private backgroundColor = 'white';
      constructor() {}
    
    }
    

    Introduction:

    1. HostListener can bind an event to the element.

    2. HostBinding can bind a style to the element.

    3. this is directive, so we can use it for

      Some Text
    4. So according to the debug, we can find that this div has been binded style = "background-color:white"

      Some Text
    5. we also can find that EventListener of this div has two event: mouseenter and mouseleave. So when we move the mouse into the div, the colour will become green, mouse leave, the colour will become white.

    0 讨论(0)
  • 2020-12-12 23:00

    @HostListener is a decorator for the callback/event handler method, so remove the ; at the end of this line:

    @HostListener('click', ['$event.target']);
    

    Here's a working plunker that I generated by copying the code from the API docs, but I put the onClick() method on the same line for clarity:

    import {Component, HostListener, Directive} from 'angular2/core';
    
    @Directive({selector: 'button[counting]'})
    class CountClicks {
      numberOfClicks = 0;
      @HostListener('click', ['$event.target']) onClick(btn) {
        console.log("button", btn, "number of clicks:", this.numberOfClicks++);
      }
    }
    @Component({
      selector: 'my-app',
      template: `<button counting>Increment</button>`,
      directives: [CountClicks]
    })
    export class AppComponent {
      constructor() { console.clear(); }
    }
    

    Host binding can also be used to listen to global events:

    To listen to global events, a target must be added to the event name. The target can be window, document or body (reference)

    @HostListener('document:keyup', ['$event'])
    handleKeyboardEvent(kbdEvent: KeyboardEvent) { ... }
    
    0 讨论(0)
提交回复
热议问题