2017-01-05 6 views
0

У меня есть раздел моего сайта, который получает отображается, когда я пользователь нажимает на определенную строку в таблице:Как я могу обнаружить, что изменения ngShow DOM сделаны?

<div ng-show="showDetails"> 
    <details item=selectedItem></details> 
</div> 

Директива содержит форму материализации, которая должна быть инициализирована с этим для того, чтобы правильно отображать:

$('select').material_select(); 

То, что я хотел бы сделать, это есть функция, которая вызывается, когда манипуляция ngShow DOM является полной, что будет вызывать $('select').material_select(); для замены выберите поля ввода с правильными настройками материализовать.

Любая идея, как я могу наблюдать изменения DOM?

ответ

1

Это очень халатный способ делать то, что вы хотите. Предположим, что у вас есть функция ngClick, которая показывает форму, в которой вы устанавливаете форму showDetails, вы можете использовать функцию $ timeout, которая вызывается после того, как угловая обработка грязной проверки DOM. Грязная проверка DOM - это не что иное, как проверка значений области в конце цикла дайджеста. Угловая внутренняя проверка всех значений области видимости от ее предыдущего значения и, соответственно, обновление модели.

$scope.clickHandler = function() { 
    $scope.showDetails = true; 
    $timeout(function(){ 
    // ng if has just concluded 
    }); 
} 
+0

Я сделаю это. –

+0

Это сработало. Благодарю. –

1

также вы можете комбинировать $timeout обслуживание и элемента ng-init директиву:

<div ng-init="init()" ng-if="showDetails"> 
    <details item=selectedItem>selectedItem</details> 
</div> 

к сведению, что я заменил ng-show с 'нг-если', который будет срабатывать каждый раз, когда элемент rerendered

плункер: http://plnkr.co/edit/357zd0Lc3i29YUxcVeM7?p=preview