如何访问NavService(即控制器的上下文)?

module MyModule {
    export class MyClass {
        public static $inject = ['$scope', 'NavService'];
        constructor(private $scope: any, private NavService: MyWizard.NavService) {
            this.$scope.okCmd = this.okCmd;
        }
        okCmd() {
            this.NavService.next('details');
        }
}


结果:NavService是未定义的,因为this.实际上代表$scope

最佳答案

这是JavaScript世界中的一个普遍问题,这就是为什么我们在es7中具有函数绑定表达式的原因:this.$scope.okCmd = ::this.okCmd;

现在,您可以使用一个lambda,它将在其闭包中存储构造函数的this指针:

module MyModule {
  export class MyClass {
    public static $inject = ['$scope', 'NavService'];
    constructor(private $scope: any, private NavService: MyWizard.NavService) {
      this.$scope.okCmd = () => this.okCmd();
    }
    okCmd() {
      this.NavService.next('details');
    }
  }
}

关于javascript - 无法从$ scope的事件访问构造函数的上下文,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32319141/

10-11 12:09