Angularjs 参考';这';$rootScope上为空。$on

Angularjs 参考';这';$rootScope上为空。$on,angularjs,typescript,Angularjs,Typescript,在我的Typescript AngularJS控制器中声明了以下构造函数 static $inject: Array<string> = [ '$rootScope', 'BookingRepository' ]; constructor( $rootScope: ng.IRootScopeService, bookingRepository: soft.data.BookingRepository ) { super(); this

在我的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\u onNavAccessSelected
声明:

accessController_onNavAccessSelected = (event: ng.IAngularEvent, accessViewModel: soft.data.AccessViewModel): void => {
    console.log(this);
}
或者使用
var self=this
解决方法:

var self = this;
accessController_onNavAccessSelected(event: ng.IAngularEvent, accessViewModel: soft.data.AccessViewModel): void {
    console.log(self);
}
或者,您可以在
bind
的帮助下,强制精确指定所需的

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

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

要防止出现这种情况,请添加.bind(此):

或者只使用ES6的箭头功能:

accessController\u onNavAccessSelected=(事件:ng.IAngularEvent,accessViewModel:soft.data.accessViewModel)=>{
console.log(this);
}
this.$rootScope.$on('accessController_onNavAccessSelected', this.accessController_onNavAccessSelected.bind(this));
this.$rootScope.$on('accessController_onNavAccessSelected', this.accessController_onNavAccessSelected.bind(this));