在我的Typescript AngularJS控制器中声明了以下构造函数。

static $inject: Array<string> = [
    '$rootScope',
    'BookingRepository'
];
constructor(
    $rootScope: ng.IRootScopeService,
    bookingRepository: soft.data.BookingRepository
) {
    super();

    this.$rootScope = $rootScope;
    this.$rootScope.$on('accessController_onNavAccessSelected', this.accessController_onNavAccessSelected);

    this.bookingRepository = bookingRepository;
}


但是,当调用accessController_onNavAccessSelected时,当我引用“ this”时,我得到的是null。我期待控制器的实例。

// Listening Events
accessController_onNavAccessSelected(event: ng.IAngularEvent, accessViewModel: soft.data.AccessViewModel): void {
    console.log(this);
}


我错过了什么?或如何获得控制器实例的参考?

最佳答案

使用回调时,此关键字的上下文会更改。

为了防止这种情况,请添加.bind(this):

this.$rootScope.$on('accessController_onNavAccessSelected', this.accessController_onNavAccessSelected.bind(this));


或仅使用ES6的箭头功能:

accessController_onNavAccessSelected = (event: ng.IAngularEvent, accessViewModel: soft.data.AccessViewModel) => {
    console.log(this);
}

关于angularjs - $ rootScope上的引用'this'为null。,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47150956/

10-11 23:28
查看更多