Как вызвать функцию ts из кода js и передать значение переменной

У меня есть ситуация, когда при нажатии на элемент html я получаю значение атрибута в home.ts с помощью jquery. Когда кнопка нажата, я хочу вызвать функцию и передать значение этого извлеченного атрибута в переменной в вызываемой функции.

Ниже мой код:

**home.html**

<div id="mainDiv">
  <span action="10004">Quick Task</span>
</div>

**home.ts**

//declare var $: any;
import { Component } from '@angular/core';
import { NavController } from 'ionic-angular';
import $ from "jquery"; //intentional use of jQuery

@Component({
  selector: 'page-home',
  templateUrl: 'home.html'
})
export class HomePage {

  constructor(public navCtrl: NavController) {

  }

  actionid;

  ngOnInit(){
    var mainDiv = document.getElementById("mainDiv");
    mainDiv.addEventListener("click", function (event) {
      console.log("Inside Event Listener");
      event.preventDefault();
        var link_id = $(event.target).attr("action");
        console.log("Actionid is:: " + link_id);
      //  this.actionid = link_id;
      //  var x = this.callpagedata();
  });
  }

  callpagedata(){
console.log("callpagedata function fired,actionid is::", this.actionid)
  }

}

Редактировать

Что-то вроде этого нужно использовать:

this.actionid = HTMLElement.addEventListener<"click">.......


person user2828442    schedule 06.04.2018    source источник
comment
Вы можете привязать событие (например, onclick) к своему HTML? - Я думаю, вам следует прочитать о привязке событий в angular. Это избавит вас от всего уродливого кода, который у вас есть в вашей функции ngOnInit(...), и избавит вас от необходимости использовать jQuery (по крайней мере, для этого варианта использования) —> вот краткое руководство по привязке события клика: talkingdotnet.com/how-to-bind-click-event-angular-2   -  person blurfus    schedule 06.04.2018
comment
я хорошо это знаю, но есть некоторая необходимость получить значение таким образом, мне нужно получить идентификатор действия, который задается динамически, и передать его функции   -  person user2828442    schedule 06.04.2018
comment
Понятно... ты умеешь пользоваться старым добрым <span action="10004" onclick=callpagedata(this)>Quick Task</span> ?   -  person blurfus    schedule 06.04.2018
comment
дайте мне значение атрибута действия, если я смогу получить его в переменной типа this.actionid , тогда все будет работать   -  person user2828442    schedule 06.04.2018
comment
что-то вроде этого нужно использовать this.actionid = HTMLElement.addEventListener<"click">.......   -  person user2828442    schedule 06.04.2018
comment
Я приближаюсь, если вы можете вписаться в мой код - this.actionid = document.getElementById("mainDiv"); this.actionid.addEventListener("click", () => { });   -  person user2828442    schedule 06.04.2018
comment
Я думаю, ты на ложном пути. Как говорит @ochi, вы должны использовать привязку данных и событий при использовании Angular. Вы вообще не должны использовать getElementById() и addEventListener(). Возможно, вы можете объяснить, откуда берется значение action? Почему нельзя использовать привязку данных?   -  person Kokodoko    schedule 07.04.2018


Ответы (1)


Добавить ссылку на HTML

<div id="mainDiv" #divRef>
  <span action="10004" #spanRef (click)="callAMethod($event)">Quick Task</span>
</div>

затем

получить ссылку из файла TS (компонент):

@Comp..
...
export class HomePage {
  @ViewChild('divRef') divReference: ElementRef;
  @ViewChild('spanRef') spanReference: ElementRef;
  public action=null;

  callAMethod(){
     this.action = this.spanReference.attr('action')
  }
}
person Serkan KONAKCI    schedule 08.03.2020