угловой щелчок, используемый с переменной - PullRequest
0 голосов
/ 09 мая 2018

Я пытаюсь вызвать (click) событие в угловом формате, передав переменную, но ничего не происходит

<a (click)="action">
  Login
</a>

И в моем .ts файле

action = 'login()';

login() {
  console.log('login !');
}

Есть ли способ использовать (click) с переменной, а не с именем статической функции?

Ответы [ 5 ]

0 голосов
/ 09 мая 2018

Вы, вероятно, можете передать переменную функции, если хотите, чтобы она была динамической:

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

@Component({
  selector: 'app-admin',
  templateUrl: './admin.component.html',
  styleUrls: ['./admin.component.css']
})
export class AdminComponent implements OnInit {

  clickHandler: any;

  constructor() { }

  ngOnInit() {
    this.clickHandler = this.funcA;
  }

  private funcA() {
    console.log('call function A');
    this.clickHandler = this.funcB;
  }

  private funcB() {
    console.log('call function B');
    this.clickHandler = this.funcA;
  }
}
0 голосов
/ 09 мая 2018

Первый метод -

Вы можете передать varibale в качестве имени метода, используя скобочную нотацию, подобную этой -

<a (click)="this[action]()">
  Login
</a> 

Рабочий пример

Второй метод-

(click) событие всегда ожидает functionName() в качестве значения.

В вашем сценарии вы можете добавить динамический eventListner для прослушивания вашей функции, используя @viewChild вот так -

<a #myEvent (click)="action">
  Login
</a>

@ViewChild('myEvent') myEvent: ElementRef;

  ngAfterViewInit() {
  (this.myEvent.nativeElement as HTMLElement).addEventListener('click', this.login.bind(this));

  // Here you can bind to any method 
}

  login() {
    console.log('login !');
  }

Рабочий пример

0 голосов
/ 09 мая 2018

Это так же просто, как у вас HTML:

<a (click)="login()">
  Login
</a>

TS:

login() {
  console.log('login !');
}

Это точно будет работать!

0 голосов
/ 09 мая 2018

Это невозможно, потому что (щелчок) ожидает, что функция будет передана, лучшее, что вы можете сделать, это:

<a (click)="action()">
    Login
</a>

вам нужно вызвать переменную 'action', которую вы установили с помощью функции! И вы не можете установить переменную действия со строкой, как вы сделали! Вы должны сделать это так:

action = login();

не так:

action = 'login()'

Надеюсь, это поможет!

0 голосов
/ 09 мая 2018

Вы не можете сдать экзамен.

(click) - это событие. "login()" это метод.

Чтобы передать переменную в функцию:

(click)="login(args)"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...