无法从$ scope的事件中访问构造函数的上下文

时间:2015-08-31 20:07:59

标签: javascript angularjs typescript

如何访问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

1 个答案:

答案 0 :(得分:2)

这是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');
    }
  }
}