收听Angular组件上的click事件

时间:2017-05-13 14:19:20

标签: javascript angular

如何在组件上侦听click事件并在组件上调用方法?

前 -

组件

if (number == 0) {
    $("#min").prop("disabled", true);
    $("#plus").click(function () {
     number = number + 1;
     document.getElementById('num').innerHTML = number;
    });
}

if (number > 0) {
    $("#min").prop("disabled", false);

    $("#plus").click(function () {
     number = number + 1;
     document.getElementById('ptn1').innerHTML = number;
    });

    $("#min").click(function () {
     number = number - 1;
     document.getElementById('ptn1').innerHTML = number;
    });
}

HTML -

import { Component } from '@angular/core';

@Component({
  selector: 'my-component',
  template: `
    <div>Hello my name is {{name}}. </div>
   `
})
export class MyComponent {
  name = "Aj"
}

现在我如何收听点击组件本身?

3 个答案:

答案 0 :(得分:14)

在您的组件中使用HostListener。 Ploppy给出的答案有效,但Angular告诉您在组件中使用HostListener而不是像这样

import { HostListener  } from "@angular/core";

@Component({
  [...]
})
export class MyComponent {

  @HostListener("click") onClick(){
    console.log("User Click using Host Listener")
  }

}

答案 1 :(得分:3)

使用host装饰器的@Component属性:

@Component({
  ...,
  host: { '(click)': 'onClick()'}
})

export class MyComponent {
  private onClick() {
    console.log('onClick');
  }
}

答案 2 :(得分:2)

与使用(click)=“myFunction”语法在任何地方监控点击的方式相同。

详细信息可以在Angular文档中找到。 https://angular.io/docs/ts/latest/guide/template-syntax.html#!#event-binding

当您说“在组件本身上”时,如果您不希望父元素监听单击,那么只需将(单击)处理程序放在组件模板中而不是父标记中。在这种情况下,父母将不知道捕获的点击。