2015-09-03 3 views
1

Редактировать: Собственно, это не дубликат. Я спрашиваю, как запустить код, как только Dynamic DOM доступен, не Static DOM:Где поставить код, который должен запускаться после визуализации представлений?

enter image description here

Потому что мои textarea s находятся внутри ngRepeat, поэтому они не доступны в Статический DOM.


Я использую autosize в угловом приложении. Я пытаюсь вызвать autosize как это в самом начале моего контроллера:

autosize(document.getElementsByTagName('textarea')); 

Это не работает, по-видимому, потому что в то время, когда функция вызывается, document.getElementsByTagName пуст.

Поэтому мне нужно вызвать функцию после элементы DOM были визуализированы. Как я могу это сделать?

Примечание: Я также попытался поместить его в блок run, но это тоже не сработало.

+1

Вы пробовали ''? –

+0

Возможный дубликат http://stackoverflow.com/a/21721060/4478897 – nada

+0

@RaphaelAmoedo, который не сработает для меня; см. мое обновление. –

ответ

2

Это пример того, что обычно описывается как «все материалы DOM поступают в директивы». Интеграция стороннего кода с привязкой угловых данных потребует некоторых дополнительных мер, но только для инициализации это так просто:

app.directive('textarea', function ($timeout) { 
    return { 
    restrict: 'E', 
    link: function (scope, element) { 
     $timeout(function() { 
     autosize(element[0]); 
     }); 
    } 
    }; 
}); 

$timeout с нулевой задержкой гарантирует, что код выполняется после того, как DOM была оказана с начальным состоянием (это относится к ng-repeat в частности).

+0

Так что объявление директивы 'textarea' что-нибудь помешало бы с угловым [встроенным] (https://docs.angularjs.org/api/ng/directive/textarea) одним? –

+0

Документ ссылается на директивы [общие для всех тегов формы] (https://github.com/angular/angular.js/blob/v1.4.3/src/ng/directive/validators.js). Нет директивы 'textarea', но даже если она есть, совершенно безопасно иметь несколько директив с тем же именем, если их области, контроллеры и шаблоны не мешают (то же самое относится к каждой группе директив на один и тот же элемент). – estus

+0

Удивительное решение - спасибо! –