我喜欢编写一个小的Angular指令,用于在用户登录时隐藏或显示元素。我注入的身份验证工厂,基本上是读取值并将值写入cookie。 问题是,“范围。$ watch(authentication.isAuthenticated”只调用一次。 如果“isAuthenticated”发生更改,则不会调用事件/观察程序。
app.directive('IfUserIsLoggedin', ["authentication", function (authentication) {
return {
restrict: 'A',
link: function (scope, element, attrs) {
function setClass() {
if (element !== undefined) {
if (authentication.isAuthenticated) {
element.removeClass("hidden");
} else {
element.addClass("hidden");
}
}
}
scope.$watch(authentication.isAuthenticated, function () {
setClass();
});
setClass();
}
};}]);
我使用this sample from the Angular documention作为我的代码。
答案 0 :(得分:3)
您的代码没有被炒的原因是因为您正在观看的价值不在范围内。将其添加到范围中,或使用不同形式的$ watch(...),如下所示:
scope.$watch(function() { return authentication.isAuthenticated }, function () {
setClass();
});
你的代码会很高兴:)。