Изменить или щелкнуть событие mat-button-toggle - PullRequest
0 голосов
/ 29 июня 2018

У меня есть группа кнопок-матов, в которой есть 5 кнопок-матов. Мне нужно вызвать событие по клику или по изменению значения, хотя я предпочитаю, чтобы это было событие щелчка.

В документации здесь показано, что событие щелчка отсутствует, но есть событие изменения.

Я тоже попробовал событие изменения (как показано ниже), но событие не запускается.

 <mat-button-toggle-group #group="matButtonToggleGroup" [(ngModel)]="rowAction">
  <mat-button-toggle value="raw_swift_msg" (change)="onValChange(value)" matTooltip="View Message">
    <i class="fa fa-eye" style="color:#455A64" aria-hidden="true"></i>
  </mat-button-toggle>
  <mat-button-toggle value="message_comment" matTooltip="Message Comment">
    <i class="fa fa-comments" style="color:#455A64" aria-hidden="true"></i>
  </mat-button-toggle>
  <mat-button-toggle value="link_trade" hasAccess id="LinkMessagePopup" matTooltip="Link Message">
    <i class="fa fa-link" style="color:#455A64" aria-hidden="true"></i>
  </mat-button-toggle>
  <mat-button-toggle value="audit_trail" matTooltip="View Audit">
    <i class="fa fa-history" style="color:#455A64" aria-hidden="true"></i>
  </mat-button-toggle>
   <mat-button-toggle hasAccess id="MessagePopup" value="move_message" matTooltip="Move message">
    <i class="fa fa-exchange" style="color:#455A64" aria-hidden="true"></i>
  </mat-button-toggle> 
  <mat-button-toggle value="log" matTooltip="View log">
    <i class="fa fa-book" style="color:#455A64" aria-hidden="true"></i>
  </mat-button-toggle>
</mat-button-toggle-group>

В моем .ts файле

import {MatButtonToggleModule} из '@ angular / material / button-toggle';

onValChange(val: string) {
 this.selectedVal = val;
}   

Как вызвать вышеуказанную функцию изменения?

Ответы [ 2 ]

0 голосов
/ 12 июля 2018

Тангенциально связанный, для любого, кто использует fastclick для устранения задержки 300 мс на мобильных веб-просмотрах, вот что мне нужно было сделать, чтобы вызвать событие <mat-button-toggle-group> s change.

Объяснение: Похоже, что в настольном браузере обработчик toggleIt mat-button-toggle (ведущий к диспетчеру change группы) прослушивает событие кнопки click, но в мобильном веб-представлении обработчик toggleIt прослушивает событие кнопки touchend напрямую. Некоторые мобильные веб-просмотры имеют встроенный прослушиватель для всех событий touchend, который ждет 300 мс, чтобы увидеть, является ли мобильный пользователь одиночным или двойным щелчком, а затем отправляет соответствующее событие click или dblclick. Fastclick вмешивается в это, также прослушивая touchend события, которые он перехватывает, так что медленное веб-представление touchendHandler никогда не вызывается, и отправляет непосредственное событие одним щелчком. Однако в нашем случае перехваченное событие touchend также не вызовет toggleIt. Таким образом, мы отключаем перехват , что не повредит времени, необходимому для вызова toggleIt (нашего UX), поскольку веб-просмотр задерживает только clickHandlers, а не прямое touchendHandler mat-button-toggle.

в main.ts

import * as FastClick from 'fastclick';
FastClick['attach'](document.body); // tslint:disable-line:no-string-literal

в myComponent.ts

public ngAfterViewInit(): void {
  const collection = document.getElementsByClassName('mat-button-toggle-label-content');
  Array.from(collection).forEach((eachHandlingElement: Element) => {
    eachHandlingElement.classList.add('needsclick'); // deeper element
  });
}

в myComponent.html

<mat-button-toggle-group [(ngModel)]="mySelectedTabIndex" (change)="applyMySearch()">
  <mat-button-toggle *ngFor="let eachTabTitle of myTabTitles; let eachTabIndex = index" [value]="eachTabIndex"
    [class.my-highlight]="eachTabIndex === mySelectedTabIndex" [disabled]="wantDisabled(eachTabIndex)">
    {{ eachTabTitle }}
  </mat-button-toggle>
</mat-button-toggle-group>

в myComponent.css

mat-button-toggle {
  flex-grow: 1; /* widen visible area */
}
mat-button-toggle ::ng-deep .mat-button-toggle-label-content {
  width: stretch; /* widen clickable area */
}
mat-button-toggle-group  {
  width: 100%;
}
.my-highlight {
  color: red;
}
0 голосов
/ 29 июня 2018

должно быть:

HTML:

 <mat-button-toggle-group #group="matButtonToggleGroup">
  <mat-button-toggle value="raw_swift_msg" (change)="onValChange($event.value)" matTooltip="View Message">
    <i class="fa fa-eye" style="color:#455A64" aria-hidden="true"></i>
  </mat-button-toggle>
  <mat-button-toggle (change)="onValChange($event.value)" value="message_comment" matTooltip="Message Comment" >
    <i class="fa fa-comments" style="color:#455A64" aria-hidden="true"></i>
  </mat-button-toggle>
</mat-button-toggle-group>

компонент:

onValChange(value){
     console.log(value)
}

отметьте рабочий стек

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...