【问题标题】:Accessing class data from callback从回调中访问类数据
【发布时间】:2016-03-24 02:21:14
【问题描述】:

下面的指令向 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"); });
   }
 }

消息总线-

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

【问题讨论】:

    标签: typescript angular


    【解决方案1】:

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

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

    有关箭头函数的词法 this 的更多提示,请参见此链接:

    【讨论】:

    猜你喜欢
    • 2015-10-13
    • 1970-01-01
    • 2012-12-14
    • 2019-09-05
    • 1970-01-01
    • 2017-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多