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

标签 javascript angularjs typescript

我如何访问 NavService(即 Controller 的上下文)?

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 中使用函数绑定(bind)表达式的原因: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/

相关文章:

AngularJS - ng-show 使用连续调用的方法

angular - 在 primeng pcalendar 中设置空白值

javascript - Angular 5 上的推杆?

javascript - 如何获取数组中的对象子集并将数组作为参数传递

javascript - 如何从 $(.class)[0] 获取 jquery 对象

使用 ui-router 模块的 AngularJS 多步表单验证

Java 服务器 -- 使用 POST 发送 Push 到 google Firebase Cloud

javascript - 如何使用 Typescript/Javascript/Angular 4 过滤 JSON 数据?

javascript - 从二维距离数组在浏览器中绘制 map

javascript - 自从升级fabric.js以来,无法在组中绘制线条