Как связать динамическую функцию с элементом HTML, используя angular 6?

Я пытаюсь связать событие с динамически созданным элементом. Я довольно успешен, но я не могу привязать функцию к событию. вот мой код

.ts-код

 data = ['fn1()', 'fn2()', 'fn3()'];
 fn1() { alert(1) }
  fn2() { alert(2) }
  fn3() { alert(3) }

HTML-код

   table>
  <ng-container *ngFor='let d of data'>
    <tr (click)=d>
      <td>
        :) !!!
      </td>
    </tr>
  </ng-container>

но когда я добавляю функцию статически, она вызывается, т.е.

<table>
  <ng-container *ngFor='let d of data'>
    <tr (click)=fn1()>
      <td>
        :) !!!
      </td>
    </tr>
  </ng-container>

</table>

это работает, может ли кто-нибудь помочь мне в этом?

Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
0
0
1 234
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам нужен массив функций, а не массив строк. И вы хотите вызвать функцию при нажатии на div:

Машинопись:

fn1 = () => { alert(1) };
fn2 = () => { alert(2) };
fn3 = () => { alert(3) };
data = [this.fn1, this.fn2, this.fn3];

HTML:

<div (click) = "d()">

Демо

привет, не могли бы вы просто проверить мой отредактированный вопрос, пожалуйста

Lijin Durairaj 14.03.2019 13:01

ну, это не работает, когда я вызываю вот так <tr (click)=d>

Lijin Durairaj 14.03.2019 13:07

Нажмите на ссылку Demo, и вы увидите, что она работает. Поэтому, если он не работает с вашим кодом, это означает, что ваш код не совпадает с моим ответом. Опубликуйте полный пример stackblitz, как это сделал я.

JB Nizet 14.03.2019 13:07

не могли бы вы объяснить мне, как это работает, пожалуйста. Спасибо за вашу помощь

Lijin Durairaj 14.03.2019 13:11

Он создает массив функций, перебирает его и создает div для каждой из них. При нажатии на div благодаря (click) = "d()" выполняется оператор d() и выполняется функция, хранящаяся в переменной d, которая является одной из функций массива.

JB Nizet 14.03.2019 13:13

как я передам параметр в этом? fn1 = (данные) => {};

Lijin Durairaj 14.03.2019 13:31

Ваши функции не принимают никаких параметров. Они предупреждают о жестко запрограммированном значении. Зачем вам передавать параметры?

JB Nizet 14.03.2019 13:32

Я только что вставил простой код, чтобы люди сосредоточились на решении и не потеряли логику, которую я реализовал. в реальной логике мне также потребуется передать параметр, не могли бы вы подсказать мне, как это сделать? Спасибо

Lijin Durairaj 14.03.2019 13:37

Так же. Объявляйте параметры в своих функциях ((foo: string, bar: number) => alert(foo, bar), и передайте значения параметров при вызове функции: d('bla', 1).

JB Nizet 14.03.2019 13:39

но параметр будет динамическим? тогда я должен передать его только в массиве

Lijin Durairaj 14.03.2019 13:40

мы не можем сделать что-то вроде этого? data = [this.fn1(1), this.fn2(2), this.fn3(3)];

Lijin Durairaj 14.03.2019 13:43

Можно, но тогда у вас не будет набора функций. у вас будет массив, содержащий результаты вызовов fn1, fn2 и fn3. Если у вас есть круглые скобки после имени функции, это означает, что вы вызываете функцию. Чего вы пытаетесь достичь, на самом деле?

JB Nizet 14.03.2019 13:44

Другие вопросы по теме