2016-09-17 83 views
0

我試圖在Angular2組件中使用vis.js(或jQuery)單擊事件。我的圖表顯示得很好,我可以成功捕捉點擊事件。從jQuery或其他事件訪問組件屬性

但是,在點擊事件的上下文中,我放棄了對組件屬性的引用。例如,this.visData是從事件中undefined

export class GraphContainerComponent implements OnInit { 
    private visData: {}; 
    private options: {} = {}; 
    private network: any; 
    @ViewChild('graphContainer') graphContainer; 

    ngOnInit() { 
     // populates this.visData 
     // this.visData = { nodes, edges } 
     this.makeGraph(); 
    } 

    makeGraph() { 
     // no problem creating and displaying my graph, everything works 
     this.network = new vis.Network(this.graphContainer.nativeElement, this.visData, this.options); 

     // click event 
     this.network.on("selectNode", function (params) { 
      console.log(this.visData); // logs "undefined" 
     } 

     $('a').on('click', function() { 
      console.log(this.visData); // "undefined" as well 
     }); 
    } 
} 

我明白爲什麼這是正常的行爲,我知道混合Angular2和jQuery或其他一些DOM的操縱庫是不推薦的做法,但有時它的你得到的全部。

從這些事件中維護對組件屬性的引用的最佳方法是什麼?

至關重要的是,我的頁面上有幾十個這樣的組件,所以我不認爲某種全局存儲是要走的路。

+0

只需使用lambda表達式'()=> {}'代替'函數(){}'。 – Paleo

回答

1

嘗試使用箭頭函數(()=>)如下所示,

this.network.on("selectNode", (params)=> { //<----this should work. 
     console.log(this.visData); // logs "undefined" 
    } 

$('a').on('click',()=> {     //<----this should work. 
      console.log(this.visData); // "undefined" as well 
});