Задать вопрос
@capscom

Как скрыть элемент после вставки в body?

Есть директива:
.directive('location', function () {
        return {
            restrict : 'A',
            scope    : {},
            replace  : true,
            templateUrl: 'common/components/location/location.html',
            link     : function (scope, element, attr) {……}
        }
});
Она используется так:
var scope     =  $rootScope.$new(true);                
var directive = $compile('<div location></div>')(scope);

$document.find('body').append(directive);

directive.hide(); - не работает
Пример вживую: plnkr.co/edit/e7fNua?p=preview

Подскажите, пожалуйста, как скрыть html, после вставки в body?
  • Вопрос задан
  • 2444 просмотра
Подписаться 2 Оценить Комментировать
Решения вопроса 1
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
.directive('location', function () {
                    return {
                        restrict : 'A',
                        scope    : {},
                        replace  : true,
                        templateUrl : 'part.html',
                        link     : function (scope, element, attr) {
                          element.hide();
                        }
                    }
                })

так мол нельзя?

Вообще проследите логику:
- берем элемент DIV и вешаем на нее директиву
- компилим элемент
- вставляем в DOM и скрываем
- angular удаляет элемент и заменяет его шаблоном (с задержкой так как выполняется ajax запрос за шаблоном).

так как у нас нету возможности даже определить момент времени, когда происходит замена извне директивы, мы не может взять так просто и скрыть элемент. Развечто так, но сами понимаете, это отстой.

body.append(directive);
setTimeout(function () {
     body.find('[data-location], [location]').hide();
}, 250);


Решение, отказаться от replace, вставить template вручную и отказаться от templateUrl.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы