Angular 6 не вызывает ngClass

У меня есть компонент для отображения левого окна. Этот компонент изменяет общедоступный флаг «flagBlocoLateral», чтобы определить, является ли это поле видимым или нет.

import {Component, Input, OnInit} from '@angular/core';

@Component({
  selector: 'app-bloco-lateral',
  template: `
    <div class = "bloco-lateral" [ngClass] = "{'bloco-lateral--aberto':flagBlocoLateral}">
      <div class = "bloco-lateral__conteudo" *ngIf = "flagBlocoLateral">
        <div class = "row">
          <div class = "col-12">
            <h4>Ajuda</h4>
          </div>
          <div class = "col-12" [innerHTML] = "textoInformativo">
          </div>
        </div>
      </div>
      <div class = "bloco-lateral__menu">
        <ul>
          <li matTooltip = "Ajuda" (click) = "toggleBlocoLateral(!flagBlocoLateral)">
            <fa-icon icon = "info-circle"></fa-icon>
          </li>
        </ul>
      </div>
    </div>`
})
export class BlocoLateralComponent implements OnInit {

  @Input()
  textoInformativo: string;
  flagBlocoLateral = false;

  constructor() {
  }

  ngOnInit() {
  }

  toggleBlocoLateral(flag) {
    this.flagBlocoLateral = flag;
  }


}

В моем машинописном коде я использую свой компонент и общедоступное свойство flagBlocoLateral для вызова ngClass. Если я вызываю toggleBlocoLateral внутри компонента, ngClass не работает.

<app-bloco-lateral #blocoLateral></app-bloco-lateral>
<div class = "bloco-central" [ngClass] = "blocoLateral.flagBlocoLateral ? 'bloco-central--resize':''">

Но если я попытаюсь распечатать свойство flagBlocoLateral вне компонента (используя {{blocoLateral.flagBlocoLateral}}), атрибут ngClass будет работать нормально.

Любые идеи? Спасибо.

есть пробовать как этот <div class = "bloco-central" *ngIf = "blocoLateral.flagBlocoLateral" [ngClass] = "blocoLateral.flagBlocoLateral ? 'bloco-central--resize':''">?

Abhishek 14.01.2019 17:30

Спасибо @Abhishek, но мой тег "div" должен быть виден все время. В моем случае "ngIf" мне не подходит

Bráulio Figueiredo 14.01.2019 17:36
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
CSS: FlexBox
CSS: FlexBox
Ранее разработчики использовали макеты с помощью Position и Float. После появления flexbox сценарий полностью изменился.
1
2
224
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Попробуйте инвертировать значение непосредственно внутри вызываемого метода, а не передавая параметр. На самом деле в этом шаге нет необходимости.

В вашем HTML-файле:

<li matTooltip = "Ajuda" (click) = "toggleBlocoLateral()">

В вашем TS-файле:

toggleBlocoLateral() {
  this.flagBlocoLateral = !this.flagBlocoLateral;
}

Спасибо за предложение. На самом деле это решение лучше, но проблема все еще сохраняется

Bráulio Figueiredo 14.01.2019 19:10

Извините, но я не могу найти ошибок в вашем коде. Я сам пробовал с очень простой версией. Кнопка, запускающая метод переключения. Элемент ввода, цвет фона которого изменяется [ngClass] и соответствующим методом toggle(). Работает как часы. - Что должен делать ваш класс bloco-lateral--aberto? Какого рода изменений / эффекта вы ожидаете?

user6749601 15.01.2019 07:37

Другие вопросы по теме