Javascript 如何在angular指令中编译新元素.attr()?
我不知道,如何使工作成为新的属性$compile对于clone()、replaceWith()等工作正常,但是,例如,我想通过添加指令来隐藏任何dom元素:Javascript 如何在angular指令中编译新元素.attr()?,javascript,angularjs,directive,Javascript,Angularjs,Directive,我不知道,如何使工作成为新的属性$compile对于clone()、replaceWith()等工作正常,但是,例如,我想通过添加指令来隐藏任何dom元素: .directive('hidden', function($compile) { return { scope:{}, link: function(scope, element, attrs){
.directive('hidden', function($compile) {
return {
scope:{},
link: function(scope, element, attrs){
scope.shown = false;
element.attr('ng-show','shown');
}
}
});
在您的情况下,该指令没有用处,因为它复制了
ng show/ng hide
行为
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上运行开发者工具栏,我发现工具栏崩溃了:)我认为这是个坏兆头。没有工具栏-只是工作。