如何调用$ scope。$ apply()使用" controller as"句法

时间:2015-01-18 17:27:16

标签: angularjs angularjs-scope

我试图尽可能地限制我在控制器中使用$scope,并用Controller as语法替换它。

我目前的问题是,我不确定如何在不使用$scope.$apply()的情况下在我的控制器中拨打$scope

编辑:我将TypeScript 1.4与angular

结合使用

我有这个功能

setWordLists() {
  this.fetchInProgress = true;
  var campaignId = this.campaignFactory.currentId();
  var videoId = this.videoFactory.currentId();

  if (!campaignId || !videoId) {
    return;
  }

  this.wordsToTrackFactory.doGetWordsToTrackModel(campaignId, videoId)
  .then((response) => {
    this.fetchInProgress = false;
    this.wordList = (response) ? response.data.WordList : [];
    this.notUsedWordList = (response) ? response.data.NotUsedWords : [];
  });
}

调用
$scope.$on("video-switch",() => {
           this.setWordLists();
});

它是(数组wordListnotUsedWordList) 在我看来没有更新:

<div class="wordListWellWrapper row" ng-repeat="words in wordTrack.wordList">
  <div class="col-md-5 wordListWell form-control" ng-class="(words.IsPositive)? 'posWordWell': 'negWordWell' ">
    <strong class="wordListWord">{{words.Word}}</strong>
    <div class="wordListIcon">
      <div class="whiteFaceIcon" ng-class="(words.IsPositive)? 'happyWhiteIcon': 'sadWhiteIcon' "></div>
    </div>
  </div>
  <div class="col-md-2">
    <span aria-hidden="true" class="glyphicon-remove glyphicon" ng-click="wordTrack.removeWord(words.Word)"></span>
  </div>
</div>

$apply的同一行中,还有另一种使用$scope.$on来调用Controller as的方法吗?

谢谢!

1 个答案:

答案 0 :(得分:6)

要回答这里的问题,只要将$scope()作为参数传递给函数,就可以在使用controller-as语法时在控制器中使用$scope方法。但是,使用controller-as语法的主要好处之一是不使用$scope,这会造成窘境。

正如评论中所讨论的那样,海报将制定一个新问题,首先审查需要$scope的具体代码,并在可能的情况下提出一些重组建议。