la portée.$regarder dans la directive fonction de lien pas appelé
J'ai cette usine,
.factory('authentication', [function() {
return {
loginRequired: false
};
}]);
J'ai ce contrôleur,
.controller('TopNavCtrl', ['$scope', 'authentication', function($scope, authentication) {
$scope.login = function() {
authentication.loginRequired = true;
};
}]);
et j'ai cette fonction de lien dans une directive,
link: function(scope, element, attrs) {
scope.show = false;
scope.$watch(authentication.loginRequired, function(value) {
scope.show = value;
});
}
Quand authentication.loginRequired = true;
est fait dans le contrôleur, le scope.$watch
dans la directive n'est pas appelé.
Des idées pourquoi?
OriginalL'auteur Johan Alkstål | 2013-10-09
Vous devez vous connecter pour publier un commentaire.
La portée.$regarder accepte comme premier paramètre de l'expression ou de la fonction. Ce que vous êtes de passage comme premier paramètre est un valeur stockées dans
authetication.loginRequired
.Ci fonctionne (en supposant que vous avez correctement injecté
authetication
usine):$watch
avec une expression de chaîne.Merci de faire partager ce que tu veux dire, Michael. Il est toujours bon de voir les alternatives.
OriginalL'auteur jusio
Suivi de @jusio de réponse, il est également possible d'utiliser une expression de chaîne tant que vous faites votre usine partie du champ d'application:
C'est ainsi parce que quand un
$watch
est fourni avec une expression de chaîne, il évalue que la chaîne à l'encontre de son champ d'application.Vous devez décider si cela vaut la peine d'encombrer votre directive du champ d'application de sorte que vous pouvez avoir sans doute un code plus lisible. Si vous êtes déjà de le faire pour une autre raison, alors c'est pas une grosse affaire.
OriginalL'auteur Michael Benford