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/...
Vous devez vous connecter pour publier un commentaire.
Pour répondre à la question à portée de main ici, vous pouvez utiliser
$scope()
méthodes dans un contrôleur lors de l'utilisation de la manette, comme la syntaxe, aussi longtemps que vous passez$scope
en tant que paramètre à la fonction. Cependant, l'un des principaux avantages de l'utilisation de la manette-que la syntaxe n'est pas à l'aide de$scope
, ce qui crée un dilemme.Comme cela a été discuté dans les commentaires, une nouvelle question sera formulée par l'affiche de revoir le code spécifique nécessitant
$scope
en premier lieu, avec quelques recommandations pour la restructuration si possible.