Angular 5 - динамическое добавление стиля к определенному элементу

Я использую Angular 5.2 в своем проекте и новичок в angular framework. Мой компонент html выглядит так: -

введите описание изображения здесь

Я хочу добавить style = "top: 200px;" динамически к выделенному элементу с помощью class = "app-alerts" на скриншоте выше в коде angular ts. Элемент div с классом app-alerts добавляется в DOM при рендеринге.

Пожалуйста, предложите изменения кода.


person Karan    schedule 18.06.2018    source источник
comment
это будет основано на каком-то условии?   -  person Aravind    schedule 18.06.2018
comment
На данный момент условий нет. Пожалуйста, предложите изменения кода.   -  person Karan    schedule 18.06.2018
comment
вы можете напрямую использовать document.querySelector('app-alerts').style="top:200px"   -  person Aravind    schedule 18.06.2018
comment
Какое мероприятие подойдет для этого? ngAfterViewInit   -  person Karan    schedule 18.06.2018
comment
если это будет дочерний компонент, используйте ngAfterViewInit или ngAfterContentInit   -  person Aravind    schedule 18.06.2018
comment
ngAfterViewInit (): void {document.querySelector ('app-alert'). style = top: 200px; } выдает строки с красными ошибками в vs.net. Он говорит, что стиль не существует для типа "Элемент".   -  person Karan    schedule 18.06.2018
comment
Выдает ошибку машинописного текста TypeError: невозможно установить для свойства style значение null   -  person Karan    schedule 18.06.2018
comment
Синтаксис может быть неправильным, я думаю, посмотрите, пожалуйста, типы возвращаемых данных.   -  person Aravind    schedule 18.06.2018
comment
Теперь у меня правильный синтаксис. Спасибо, Аравинд!   -  person Karan    schedule 18.06.2018
comment
ngAfterViewInit (): void {(document.querySelector ('. app-alerts') как HTMLElement) .style.top = '150px'; }   -  person Karan    schedule 18.06.2018
comment
Вы можете переместить ответ в правильный раздел. И тогда я могу выбрать это в качестве ответа.   -  person Karan    schedule 18.06.2018
comment
OP - Есть ли причина, по которой вы не предпочитаете решение от @ChrisStanley? Кажется, это угловой способ решения вашей проблемы, afaict.   -  person ruffin    schedule 05.11.2018
comment
Крис ответил в августе, и я получил более раннее решение в июне. Его решение тоже изящное.   -  person Karan    schedule 08.11.2018


Ответы (4)


Согласно нашим комментариям, вы должны использовать document.querySelector после перехвата жизненного цикла

ngAfterViewInit() {
    (document.querySelector('.app-alerts') as HTMLElement).style.top = '150px';
}
person Aravind    schedule 18.06.2018
comment
Когда вам нужно достичь собственного элемента, рассмотрите возможность использования ссылочных переменных шаблона angular. io / guide /. Для определенного динамического стиля выберите @ chris-stanley anwser - person Hettomei; 03.09.2019
comment
Это не решение для angular, поэтому голосование против. - person makkasi; 21.02.2020
comment
Нет, это действительно плохая практика - person nicowernli; 14.09.2020

Я очень опоздал на эту вечеринку, но НЕТ! НЕ ИСПОЛЬЗУЙТЕ DOCUMENT.QUERYSELECTOR. Это НЕ стиль Angular DOM-элемента!

<div [ngStyle]="{'top.px': divStyle}">

Затем в вашем компоненте у вас есть

ngAfterViewInit() {
  this.divStyle = 200; 
}
person Chris Stanley    schedule 14.08.2018
comment
Вы не можете сделать <div [style.top]="'200px'">? - person Ben; 28.06.2019
comment
@Ben Ты умеешь даже <div [style.top.px]="variableTopHeight">! Если вы хотите встроить значение, вы можете <div [style.top.px]="'200'"> - person Frozenfrank; 26.08.2019

Я наткнулся на страницу с хорошим объяснением и образцом кода для динамического добавления стиля в Angular 2+. Динамическое присоединение стиля в Angular

person Pankaj Shinde    schedule 01.04.2020

У меня была такая же проблема, мне нужно было прокручивать div, когда пользователь прокручивает страницу, и я решил мою проблему с помощью кода ниже. В компоненте, на котором вы хотите захватить прокрутку:

import { HostListener } from '@angular/core';

@ViewChild('curtain') divCurtain: ElementRef;

export class ComponentX {
    @HostListener('window:scroll', ['$event']) onScrollEvent($event) {
        console.log(window.pageYOffset);
        this.divCurtain.nativeElement.style.top = window.pageYOffset.toString().concat('px');
    }

    ngOnInit(): void { }
}

Только это, я не создавал никаких директив или другого кода. Этот HostListener выполняется каждый раз, когда пользователь прокручивает страницу, и я получаю window.pageYOffset для отправки в свой div.

Я надеюсь, что это помогает.

person Fabricio Leite    schedule 20.05.2020