Pourquoi dois-je appeler $ scope. $ Digest () ici?
J'ai créé une directive pour afficher les info-bulles:
app.directive('tooltip',function(){
return{
restrict: 'A',
link: function(scope,element,attr){
element.bind('mouseenter',function(e){
scope.setStyle(e);
});
}
}
});
Le correspondant setStyle()
fonction:
$scope.setStyle = function(e){
$scope.style = {
position: 'absolute',
//some other styles
};
$scope.$digest();
};
$scope.style
est appliqué à cette:
<span ng-style="style">I am a tooltip</span>
qui fait partie de mon point de vue, géré par le contrôleur qui possède $scope.style
Pourquoi dois-je appeler $digest()
afin d'appliquer les modifications à $scope.style
qui a été déclaré et initialisé plus tôt?
source d'informationauteur user2422960
Vous devez vous connecter pour publier un commentaire.
Parce que le rappel attaché à la
mouseenter
événement est à l'extérieur du angulaire du champ d'application; angulaire n'a aucune idée de quand cette fonction s'exécute/se termine le recueil de cycle n'est jamais couru.Appel
$digest
ou$apply
dit angulaire de mettre à jour les liaisons et le feu des montres.element.bind()
signifie écouter pour le navigateur d'événements et d'exécuter de rappel lorsque cet événement est distribué sur l'élément. Nulle part dans cette chaîne d'événements Angulaire est compris: il ne sait pas que l'événement s'est produit. Par conséquent, vous devez le dire à propos de l'événement de manière explicite. Cependant, dans la plupart des cas, vous devez utiliser$scope.$apply()
pas$scope.$digest()
surtout quand vous n'êtes pas sûr à ce sujet.Ici, c'est plus de code approprié pour votre situation:
et
setStyle()
:$champ d'application.appliquer() a deux implémentations, celui qui n'a pas d'arguments et d'autres on prend une fonction comme argument, l'évalue et de déclencher digest(). En utilisant ces derniers, on a des avantages qu'il enroule votre fonction dans le try/catch clause qui est géré par l' $exceptionHandler service.
Bien, vous pouvez le faire comme ceci:
Cela va envelopper votre appel de fonction à appliquer et auto déclenche le digérer.