Добавить класс через ngClass, если нажата отключенная кнопка

Я хочу иметь возможность добавить класс scss («ошибка») к элементу, если нажата кнопка [отключена]. Как мне этого добиться? Angular2 кнопка отключения атрибут [disabled] является обязательным, так что это не рабочее решение.

<button [disabled] = "!isTermAgreed || isLoading" (click) = "payForStory(paymentObject.StoryId)">

scss, который элемент span получит через [ngClass]:

&.error {
  border: 2px solid red;
}
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в 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. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
1
0
12 783
4

Ответы 4

Создайте логическое свойство в своем компоненте, т.е. activeClass, прослушайте событие щелчка на кнопке, чтобы переключить его, а затем просто используйте ngClass для назначения класса в зависимости от логического значения.

[ngClass] = "'yourClass': activeClass"

редактировать

Как правильно указано, вы не можете прослушивать события на отключенной кнопке. Решение этой проблемы - обернуть элемент div и прослушивать события этого элемента (подробнее см. Ответ это) или использовать класс для имитации отключенного эффекта.

Я думал об этом, но у меня создалось впечатление, что вы не можете прослушивать событие щелчка на отключенных кнопках?

blixenkrone 19.04.2018 15:56

Спасибо, это может сработать - как кто-то здесь сказал, это действительно не лучший способ сделать это :-) Ура

blixenkrone 19.04.2018 16:08

В Angular нет удобного способа сделать это. Структура Angular такова, что вам не следует вручную проверять DOM, за исключением редких случаев. Если вы должны это сделать, ознакомьтесь с эта ссылка, в этом принятом ответе есть решение, которое может быть вам полезно.

Альтернативный подход может заключаться в том, чтобы всегда добавлять класс .error по щелчку, но строить свой sass так, чтобы свойства .error активировались только тогда, когда также присутствует .disabled.

Например:

<button (click) = "isError = true" [ngClass] = "{error: isError}">My Button</button>

А затем в вашем SASS:

.disabled.error {
  //Your style here
}

Как бы вы добавили класс .error в событие нажатия на отключенную кнопку?

blixenkrone 19.04.2018 15:58

Добавил пример выше. Этот код не сбрасывает ошибку с кнопки, вам придется добавить эту логику самостоятельно в зависимости от вашего приложения.

nmg49 19.04.2018 16:37

Если ваша кнопка отключена, она не будет прослушивать событие (click). В этом случае вы можете сделать так, чтобы она выглядела как отключенная с помощью css и включила атрибут disabled после его нажатия.

в вашем компоненте:

clickedMe: boolean = false;

В вашем HTML:

<button [disabled] = "(!isTermAgreed || isLoading) && clickedMe" [ngClass] = "{'disableCss': (!isTermAgreed || isLoading), 'error': clickedMe && (!isTermAgreed || isLoading)}"(click) = "payForStory(paymentObject.StoryId); clickedMe = true">

И ваш css будет примерно таким:

.disableCss {
    background: #dddddd
}

Это может сработать, спасибо, я внедрю и протестирую это.

blixenkrone 19.04.2018 16:09

См. Обновленный ответ, я забыл удалить класс error, когда кнопка станет активной.

Ashish Ranjan 19.04.2018 17:01

Кроме того, если вы не хотите вызывать payForStory(), когда критерии отключения истинны, у вас может быть что-то вроде: (click) = "!(!isTermAgreed || isLoading) ? (payForStory(...)): '' ; clickedMe = true"

Ashish Ranjan 19.04.2018 17:31

Вы не можете прослушивать события щелчка на отключенной кнопке. Вы можете добавить к кнопке отключенный класс, а затем прослушивать события как обычно. Пожалуйста, просмотрите этот stackblitz: https://stackblitz.com/edit/angular-3ksttt

Составная часть:

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

@Component({
  selector: 'my-app',
  templateUrl: './app.component.html',
  styleUrls: [ './app.component.css' ]
})
export class AppComponent  {
  isButtonClicked: boolean = false;

  public disableButtonClick() {
    this.isButtonClicked = true;
  }
}

Шаблон:

<button [ngClass] = "isButtonClicked ? 'error' : ''" (click) = "disableButtonClick()" class = "disabled">BUTTON</button>

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