Вызов функции компонента angular2 из событий привязки sigma.js

У меня есть простая функция в моем компоненте angular2:

onSelectNode(label: String) {
console.log(label)
// do something based on label
  }

и создали базовый граф sigma.js в angular2 следующим образом:

var s = new sigma({
  graph: sigmaJson,
  container: 'network-graph',
  settings: {
    defaultNodeColor: '#ec5148'
  }
});

Мой график успешно отображается. Теперь я хочу вызвать функцию onSelectNode при нажатии на один из узлов. Итак, я использовал bind функциональность следующим образом:

s.bind('clickNode', nodeClick)

Функция nodeClick определяется следующим образом:

nodeClick(event) {
this.selectedLabel = event.data.node.label
console.log(this.selectedLabel)   // this prints correctly
this.onSelectNode(this.selectedLabel)  // getting error here

}

Но я не могу вызвать функцию компонента изнутри nodeClick функция. Я получаю следующую ошибку в консоли javascript:

ERROR TypeError: this.onSelectNode is not a function

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

1 ответ

Решение

Нашел решение. Проблема была в неправильном использовании this переменная области видимости, как указано в первом комментарии здесь. В итоге внесите следующие изменения в код, и это сработало:

  1. Сохранить текущий this контекст в отдельной переменной перед функцией обратного вызова.

    var self = this;

  2. Изменен код следующим образом:

    s.bind('clickNode', function (e) { console.log(e.type, e.data.node.label, e.data.captor); self.selectedLabel = e.data.node.label; self.OnSelectNode(self.selectedLabel); });

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