监视属性的Angular指令

时间:2014-10-06 13:23:03

标签: javascript angularjs angularjs-directive

我喜欢编写一个小的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作为我的代码。

1 个答案:

答案 0 :(得分:3)

您的代码没有被炒的原因是因为您正在观看的价值不在范围内。将其添加到范围中,或使用不同形式的$ watch(...),如下所示:

scope.$watch(function() { return authentication.isAuthenticated }, function () {
    setClass();
});

你的代码会很高兴:)。