2014-10-06 14 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

Хороший вопрос. Вы ориентируетесь на старые браузеры? Есть серверные решения для этого, но самые красивые из них всегда зеленые. –

+0

@SanderElias Я использую современные браузеры, такие как google chrome version 37 – MRP

+0

Хорошо! вы можете использовать mutationObsever. Остается один вопрос: Что вы добавляете к своей директиве, являются ли эти прямые дети этой директивой или есть (количество) слоев между ними? –

ответ

6

вы можете использовать fieldset.

Wrap все ваши поля в Fieldset и использование нг-инвалидов, как:

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

Он будет автоматически отключают все входы внутри полей.

+0

Это изящное решение :) –

+0

Не работает на IE, работает на Edge, но нет версии IE – ChrisFletcher

+0

Однако, хотя он работает для входов угловых материалов, он не работает для кнопок углового материала. –

2

Имею запасные (пару) минут!

Here is the plunk демонстрация мутационного сервера.

суть находится в этой строке:

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

ведьмы подписаться на все обновления РОМА элемента. Я отбросил зависимость от jQuery, пока я был у нее;)

+0

Большое спасибо – MRP

Смежные вопросы