2014-10-06 69 views
0

所有子元素我创建了禁用所有选定的子元素这样的指令:禁止使用angularjs指令

app.directive('noeDisable', function() { 
     var linkFunction = function (scope, element, attributes) { 
      scope.text = attributes["=noeDisable"]; 
      if (scope.text == 'true') { 
       $(element).find('input,button,a').attr("disabled", true); 
      } 
     }; 
     return { 
      link: linkFunction 

     }; 
    }); 

,并在这个例子很好地工作:<div noe-disable="true"> ... </div>。但问题是稍后加载一些子元素,例如,在ajax调用之后,或者在父元素内部添加了一个向其父元素添加一些子元素的另一个angularjs指令时,它们将不会被禁用! 我该如何处理这个问题?

+1

不错的问题。你的目标是旧的浏览器? 有很多解决方案,但最好的只是绿色的。 – 2014-10-06 05:36:15

+0

@SanderElias我使用现代浏览器,如谷歌铬版本37 – MRP 2014-10-06 05:38:16

+0

好!那么你可以使用一个mutationObsever。还有一个问题, 你添加到你的指令中的东西是那些指向这个指令的直接子对象,还是在它们之间有(多少个)层? – 2014-10-06 05:42:27

回答

6

你可以使用fieldset。

总结所有的字段集和使用领域的NG-禁用,如:

<fieldset ng-disabled="shouldDisabled"> 
     ... inputs ... 
</fieldset> 

它会自动禁用字段集内的所有投入。

+0

这是一个优雅的解决方案:) – 2015-12-18 11:08:21

+0

不适用于IE,适用于Edge,但不适用于IE版本 – ChrisFletcher 2016-01-28 13:31:34

+0

但是,虽然适用于角度材料输入,但它不适用于角度材料按钮。 – 2017-05-31 20:20:30

2

有一个备用(夫妇关闭)分钟!

Here is the plunk showcasing the mutationObserver。

的关键是在这一行:

observer.observe(element[0], config); 

女巫订阅元素的所有DOM更新。 我放弃了jQuery的依赖关系,而我在它;)

+0

非常感谢 – MRP 2014-10-06 07:12:04