在ng-class表达式中使用“this”

时间:2015-10-29 16:15:45

标签: angularjs

我试图在ng-class条件下使用'this',但它不起作用。

我基本上是在尝试这个:

<div class=".." ng-class="{hidden: $(this).find(..).hasClass('trigger')}">
</div>

我希望AngularJS根据嵌套元素上不同类的存在来应用“隐藏”类。

我应该将复杂的代码移动到控制器吗?如何引用正在定义的元素ng-class?

问候!

2 个答案:

答案 0 :(得分:1)

在这种情况下,您可能想要创建自定义指令。一个好的经验法则是你不应该直接从控制器进行dom操作。在您的情况下,自定义指令将如下所示:

...
.directive('applyTrigger', function() {
    return {
        restrict: 'A',
        link: function(scope, element, attrs) {
            var triggerEl = element.find(..);
            scope.$watch(function() {
                return triggerEl.attr('class'); }, 
                function(newValue){
                    if(triggerEl.hasClass('trigger')) {
                        element.addClass('hidden');
                    } else {
                        element.removeClass('hidden');
                    }

                });

        };
    }
});

然后你可以在父div上使用它:

<div class=".." applyTrigger>
</div>

尝试一下,让我知道你发现了什么!

答案 1 :(得分:0)

您应该使用控制器告诉您是否应该设置ng-class。

<div class=".." ng-class="{hidden: {{showthisdiv}}}">
</div>

然后在控制器中设置showthisdiv。