Javascript 如何在angular指令中编译新元素.attr()?

Javascript 如何在angular指令中编译新元素.attr()?,javascript,angularjs,directive,Javascript,Angularjs,Directive,我不知道,如何使工作成为新的属性$compile对于clone()、replaceWith()等工作正常,但是,例如,我想通过添加指令来隐藏任何dom元素: .directive('hidden', function($compile) { return { scope:{}, link: function(scope, element, attrs){

我不知道,如何使工作成为新的属性$compile对于clone()、replaceWith()等工作正常,但是,例如,我想通过添加指令来隐藏任何dom元素:

.directive('hidden', function($compile) {
                return {
                    scope:{},
                    link: function(scope, element, attrs){
                        scope.shown = false;
                        element.attr('ng-show','shown');
                    }
                }
            });

在您的情况下,该指令没有用处,因为它复制了
ng show/ng hide
行为

  • 直接在DOM元素上使用
    ng hide/ng show
  • 使用自定义指令,但不要在内部使用
    ng show
    。请尝试
    element.hide()
    element.show()

  • 如果这实际上只是用于显示和隐藏内容,请按照@Max建议执行,但是如果在
    链接中创建属性,则
    ng show
    无法工作,请改用
    controller
    函数

    如果问题是更复杂场景的示例,您可以使用以下代码

    // as the compile works with contents string you need the get it.
    $compile(element.parent().contents())(scope);
    

    希望这有帮助。

    谢谢,但我需要在指令的范围内操作。Element.hide()/show()可以替换为添加类和css样式,但我想得到clean指令。@philosophocat使用
    bg show
    inside指令隐藏元素是不干净的。它的性能很低。不要害怕在指令中使用jquery,因为这是指令的预期行为。我认为您是对的。我试图理解指令的概念,它是角度的,功能性的,打包成单一的本质。“角度引导”被认为是好的,但在我看来——它太大了,不干净,无法快速理解。例如,下拉菜单-单击一次可显示,单击一次(任何位置)可隐藏。它被打包成一个模块?很有趣的想法,很有效。显然,如果家长内容太多,而我在mozilla的firebug中发现了两个未标记的错误(只是错误号和干净的控制台),那么这些错误听起来很奇怪。当开发者工具栏打开时,你可以试试应用程序chrome吗。也许你们可以得到更多的信息。在chrome上运行开发者工具栏,我发现工具栏崩溃了:)我认为这是个坏兆头。没有工具栏-只是工作。