Comment appeler $scope.$appliquer() à l'aide de “contrôleur” de la syntaxe

J'essaie de limiter ma consommation de $scope dans mes contrôleurs, autant que possible, et de le remplacer avec de l' Controller as syntaxe.

Mon problème actuel est que je ne sais pas comment appeler $scope.$apply() dans mon contrôleur sans l'aide de $scope.

Edit: je suis à l'aide de la Machine à 1,4 en conjonction avec angulaire

J'ai cette fonction

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 : [];
  });
}

être appelée à partir de

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

Et c'est (tableaux wordList et notUsedWordList)
n'est pas mis à jour de mon point de vue:

<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>

Le long des mêmes lignes de $apply, est-il une autre façon d'attirer l' $scope.$on à l'aide de Controller as?

Merci!

  • Vous aurez à utiliser $scope (ou $rootScope) pour les deux $apply et $on.
  • en vertu de 99% de toutes les situations, vous ne devez appeler $scope.$apply(), quand vous travaillez sur les dom directement, sans angulaire de la connaissance. Malheureusement, de nombreuses personnes ont recours à $scope.$apply() comme une "solution" tout-quand quelque chose ne fonctionne pas, mais généralement la meilleure chose à faire est de corriger le code de façon angulaire est au courant de ce qui se passe.
  • voyez-vous quelque chose dans mon code qui serait quelque chose de cassé ou mal écrit, qui pourrait résoudre mon problème?
  • votre code n'a pas vraiment montrer où la $scope.$on() fonction est dans le contrôleur, peut-être nous prendre un peu de plus près le code du contrôleur?
  • Si votre code ne fonctionne pas, vous devriez poster une autre question, comme vous l'avez déjà demandé à propos de quelque chose d'autre ici. Les gens vont confondre le contraire 🙂
  • va faire. merci
  • à partir de github.com/angular/angular.js/wiki/Best-Practices, utilisez Uniquement .$diffusion() , .$emit() et .$sur() pour les événements atomiques. Je soupçonne que vous pouvez restructurer le contrôleur d'éliminer la nécessité pour .$sur()
  • Hmm, maintenant je suis en diffusion à partir d'une seule usine à tous mes contrôleurs (seulement 8 d'entre eux pour le moment) et tous mes contrôleurs de la nécessité de réagir à ce message. Comment serais-je capable d'émuler cet effet à l'aide d'une autre façon?
  • sont tous les 8 contrôleurs sur l'écran en même temps? que serait atomique. Si non, alors probablement habillage de l'événement dans un $timeout et mise à jour d'une variable est probablement plus approprié. bien sûr, voir un peu plus de votre architecture serait dans l'ordre, afin d'être plus clair.
  • Oui, ils sont tous là en même temps. Je vais être ramification vers un autre question prochainement.
  • aussi, c'est une excellente lecture: technofattie.com/2014/03/21/...
  • Cette question est maintenant de ramifiée. stackoverflow.com/questions/28013630/...