Angularjs 将侦听器添加到属性指令?

Angularjs 将侦听器添加到属性指令?,angularjs,Angularjs,我有一个类似这样的指令。它添加了一个基于布尔值的类 .directive('gdShow', function(){ return{ restrict: 'A', link: function(scope, elem, attrs){ console.log(attrs.gdShow); if(attrs.gdShow === true){ elem.addClass('gdS

我有一个类似这样的指令。它添加了一个基于布尔值的类

.directive('gdShow', function(){
    return{
        restrict: 'A',
        link: function(scope, elem, attrs){
            console.log(attrs.gdShow);
            if(attrs.gdShow === true){
                elem.addClass('gdShow');
            }else{
                elem.addClass('gdHide');
            }
        }
    };
我希望这个指令在我传递给diercative的属性更新时更新这个类。我这样传递它:
gdshow=“{{posted}}”

比如一个监听器或者一个数据绑定。这就是我要找的

我试图补充

    scope: {
        ngShow: '=',
    },

但这也不起作用。

简单的解决方案是使用
attrs.$observe
方法监视属性值的更改。如果您不想,这不需要您创建隔离作用域


用户名
你好
app.directive('gdShow',function(){
返回{
限制:“A”,
链接:功能(范围、要素、属性){
属性$observe('gdShow',函数(gdShow){
国际单项体育联合会(gdShow){
元素removeClass(“隐藏”);
}否则{
元素addClass(“隐藏”);
}
});
}
};
});

使用
ng class
来做这类事情。文件是


既然还有一个可用的指令,为什么还要编写另一个指令?

您可以避免自己指令的复杂性,并使用现有指令ngClass从模板中执行此操作:

<any-element ng-class="{'gdShow': posted, 'gdHide': !posted}"></any-element>

作用域:{gdShow:'='},然后您可以使用“scope.gdShow”访问is。如果我们试图有条件地添加一个类,那么ng类可能值得研究。不管怎样,@Studie在这里很好地回答了实际问题。我支持@rdjs的评论。我的实际案例更复杂,有延迟等。我认为这只是纯js,所以我不想把它带到问题中。我的实际案例更复杂,有延迟等。我认为这只是纯js,所以我不想把它带到问题中。
<any-element class="{{posted ? 'gdShow' : 'gdHide'}}"></any-element>