@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 просмотра
Решения вопроса 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.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы
22 нояб. 2024, в 23:55
3000 руб./за проект
22 нояб. 2024, в 22:26
3500 руб./за проект
22 нояб. 2024, в 21:47
3000 руб./за проект