Angularjs Angular ng类范围/语法?

Angularjs Angular ng类范围/语法?,angularjs,syntax,scope,ng-class,Angularjs,Syntax,Scope,Ng Class,我有一个角度指令(如下)管理图标放置和图标状态。代码按原样工作,但我觉得在我的标记变量中添加ng class将消除对setMaskingIcon函数的需要。该函数基本上是jquery,它感觉像是基于privacy变量的ng类参数的完美候选者 (function() { 'use strict'; angular .module('inputControls', []) .directive('inputControls', function($log) { var l

我有一个角度指令(如下)管理图标放置和图标状态。代码按原样工作,但我觉得在我的标记变量中添加
ng class
将消除对
setMaskingIcon
函数的需要。该函数基本上是jquery,它感觉像是基于
privacy
变量的
ng类
参数的完美候选者

(function() {
'use strict';

angular
    .module('inputControls', [])
    .directive('inputControls', function($log) {

    var linkFunction = function(scope, element, attr) {

        var privacy = false;
        var setting = attr.inputControls;
        var controlMarkup;
        var baseMarkup = '<div class="icon-holder"></div>';
        var infoControl = '<icon class="icon-info"></icon>';
        var toggleControl = '<icon class="icon-show-hide icon-visible"></icon>';

        if(setting === 'info') {
            controlMarkup = infoControl;
        }else if(setting === 'toggle') {
            controlMarkup = toggleControl;
        }else if(setting === 'both') {
            controlMarkup = infoControl + toggleControl;
        }

        element.after(baseMarkup);
        element.next().append(controlMarkup);
        setMaskingIcon();

        element.next().find('.icon-show-hide').click(function(){
            privacy = !privacy;
            setMaskingIcon();
        });

        element.next().find('.icon-info').click(function(){
            $log.log('info click');
        });

        function setMaskingIcon() {
            if(privacy === true) {
                // these blocks are basically jquery. i tried using 
                // 'ng-class="{icon-visible:!privacy, icon-private:privacy}"'
                // but that didn't seem to do the trick. any advice would be awesome
                element.next().find('.icon-show-hide').removeClass('icon-visible');
                element.next().find('.icon-show-hide').addClass('icon-private');
            } else {
                element.next().find('.icon-show-hide').addClass('icon-visible');
                element.next().find('.icon-show-hide').removeClass('icon-private');
            }
        }

    };

    return {
        restrict: 'A',
        link: linkFunction
    };


  });

})();
(函数(){
"严格使用",;
有棱角的
.module('inputControls',[])
.directive('inputControls',函数($log){
var linkFunction=函数(范围、元素、属性){
var隐私=假;
var设置=attr.inputControls;
var控制标记;
var baseMarkup='';
var infoControl='';
var-toggleControl='';
如果(设置=='info'){
controlMarkup=infoControl;
}else if(设置==='toggle'){
controlMarkup=切换控件;
}else if(设置==='both'){
controlMarkup=infoControl+toggleControl;
}
元素之后(baseMarkup);
element.next().append(controlMarkup);
设置掩码图标();
元素.next().find('.icon show hide')。单击(函数(){
隐私=!隐私;
设置掩码图标();
});
元素.next().find('.icon info')。单击(函数(){
$log.log('info click');
});
函数setMaskingIcon(){
如果(隐私===true){
//这些块基本上是jquery
//'ng class=“{icon-visible:!privacy,icon-private:privacy}”
//但这似乎不管用。任何建议都会很棒
element.next().find('.icon show hide').removeClass('icon-visible');
元素.next().find('.icon show hide').addClass('icon-private');
}否则{
元素.next().find('.icon show hide').addClass('icon-visible');
element.next().find('.icon show hide').removeClass('icon-private');
}
}
};
返回{
限制:“A”,
link:linkFunction
};
});
})();

隐私
变量(当前链接函数专用,因此外部无法访问)转换为作用域的属性:

scope.privacy = false;
// ... then in clickHandler:
scope.privacy = !scope.privacy;

在这种情况下,它将在
ng类中正确计算。此外,你可以考虑使用<代码> NG Studio,如果你只是切换这些元素的可见性,而不是他们的样式。

谢谢响应!我将scope添加到var(并将其添加到ng类中的args),但当我将'ng class=“{icon visible:!scope.privacy,icon private:scope.privacy}”添加回标记字符串时,这并没有改变结果。我遗漏了一步吗?你的意思是你将这个类添加到附加的字符串中?但是在本例中,您还应该添加
$compile(controlMarkup)(scope)
的结果。我非常感谢您的帮助,但我觉得我遗漏了一些东西。。您能告诉我需要在哪里添加编译函数吗?
元素.next().append($compile(controlMarkup)(scope))