从回调中访问类数据

shi*_*hiv 1 typescript angular

下面的指令使用MessageBus类注册一个监听器.在调用调度函数时执行已注册的回调.我需要从回调中访问"dragZoneElems"并对其执行操作.请告知如何做到这一点.目前它说dropZoneElems = undefined,因为这个数据在回调范围之外.但是数据存在且未定义.

export class DragZoneDirective implements OnInit{
   private _messageBus : IMessageBus

   @Input() dragZoneElems: Object[];
   constructor() {
      this._messageBus = MessageBus;
   }

   ngOnInit(){
    this._messageBus.listen("dragStart", function(val) {
        console.log("DragStart", this.dragZoneElems);
        let index = this.dragZoneElems.indexOf(val);
        if(index > -1)
            this.dragZoneElems.slice(index, 1);
    });
    this._messageBus.listen("dragStop", function(val) { console.log("DragStop"); });
   }
 }
Run Code Online (Sandbox Code Playgroud)

消息总线 -

static dispatch(event: string, info?: any): void {
     this.listeners
        .forEach((l) => {
           if (l["event"] === event) {
               l["cb"](info);
           }
        });
}
Run Code Online (Sandbox Code Playgroud)

Thi*_*ier 5

您需要使用箭头函数才能使用词法(它对应于您的组件实例):

this._messageBus.listen("dragStart", (val) => { // <--------
    console.log("DragStart", this.dragZoneElems);
    let index = this.dragZoneElems.indexOf(val);
    if(index > -1)
        this.dragZoneElems.slice(index, 1);
});
Run Code Online (Sandbox Code Playgroud)

有关箭头函数词汇的更多提示,请参阅此链接: