AngularJS:为什么我的ES6控制器中的$ scope未定义?

时间:2018-05-13 15:46:27

标签: javascript angularjs ecmascript-6

我是AngularJS的新手,所以这个问题的答案可能很明显,但我坚持下去。

在我的组件中,我有以下代码(我已将其简化为问题):

class $controller {
  constructor($scope, Vote) {
    $scope.isRunning = false;
    this.Vote = Vote;
  }

  switchVote(user){
    $scope.isRunning = true;
    if (appUser.vote) {
      var vote = new this.Vote({userId: user.id});
      vote.delete().then(function() {
        user.vote = null;
        $scope.isRunning = false;
      })
    }
     else {
      this.componentThing.createVote(user).then(function(vote) {
        user.vote = vote.id;
        $scope.isRunning = false;
      })
    }
  }
}

在HTML中,我在按钮上有ng-disabled="isRunning",允许投票创建和销毁。我们的想法是,如果用户在完成ajax请求之前单击两次,则可以防止多个请求堆积起来。

我的问题是我的switchVote()方法中未定义$ scope。为什么它是未定义的,即使我在构造函数中初始化它?

1 个答案:

答案 0 :(得分:0)

$scope仅在构造函数中可见。您需要将其分配给this上的访问者,以便您可以在其他功能中访问它。

constructor($scope, Vote) {
   this.$scope = $scope;
   this.$scope.isRunning = true;
   ...
}

switchVote(user){
   this.$scope.isRunning = true;
   ...
}