Вызов функции компонента 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
переменная области видимости, как указано в первом комментарии здесь. В итоге внесите следующие изменения в код, и это сработало:
Сохранить текущий
this
контекст в отдельной переменной перед функцией обратного вызова.var self = this;
Изменен код следующим образом:
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); });