Как открыть модальное окно при нажатии в раскрывающемся списке - PullRequest
0 голосов
/ 25 мая 2020

Добрый день, разработчики, я работаю в этом приложении с angular, и теперь я пытаюсь при нажатии на одну из опций, чтобы показать модальный тег. По сути, я создал параллельный шаблон, равный элементу, выбранному в раскрывающемся списке, и поверх этого шаблона с помощью тега a я установил все logi c для отображения модального окна, но думаю, это не удобно для пользователя, потому что пара дополнительных clicks.Пытаться установить тег a внутри параметров также не было жизнеспособным, потому что мой раскрывающийся список не работал. Вот имитация того, что я сделал:

HTML tag

      <select [hidden]="!state" name="optionsInc" required [(ngModel)]="optionsInc" (change)="subItemSelected($event)">
        <option value="select" [ngValue]="null" [disabled]="true">Select Income</option>
        <option *ngFor="let item of allKeysIncomings" label="{{item}}" value="{{item}}"></option>
      </select>====>DROPDOWN LIST LOGIC


    <p [hidden]="!state"> <a *ngIf="incomeSelected"
      href="#"
      class="btn btn-primary btn-block"
      data-toggle="modal"
      data-target="#editItem"
    >{{incomeSelected}}</a>
    </p>====>PARALELL REFERENCE TO POP THE MODAL UP

    <div class="modal fade" id='editItem'>======>MODAL 
      SOME TAGS AND CODE
    </div>

затем на моем компоненте я сделал это:

imports...

@Component({
  selector: 'app-user-sheet-balance',
  templateUrl: './user-sheet-balance.component.html',
  styleUrls: ['./user-sheet-balance.component.css'],
})
export class UserSheetBalanceComponent implements OnInit {

allKeysIncomings: any;==>ITERABLE
incomeSelected: string;

constructor(some code) {}

ngOnInit(): void {some code}

  async subItemSelected(event) {
    SOME CODE
      return (
        await (this.incomeSelected = event.target.value),
     );
  }

Весь этот процесс выполняет задачу по активации модального окна после того, как я нажимаю тег a, но вместо создания этой параллельной ссылки на раскрывающийся список, мне интересно, можно ли сделать это прямо из раскрывающегося списка в факт. Я наблюдал за некоторыми подобными проблемами в сообществе, например: Открыть модальное окно с помощью параметра из раскрывающегося списка - Angular 2 + ngx , но не работает в моих спецификациях кода. Есть обновленные идеи по этому поводу?. Заранее спасибо !!!!!!

1 Ответ

1 голос
/ 26 мая 2020

если у вас Component с макетом диалогового окна в ModalComponent, он должен работать следующим образом

    import { Injectable } from '@angular/core';
    import { MatDialog, MatDialogRef } from '@angular/material/dialog';
    import { ModalComponent } from './modal/modal.component';

    @Injectable({
      providedIn: 'root'
    })
    export class TestDialogService {

      dialogRef: MatDialogRef<ModalComponent, any>;

      constructor(public dialog: MatDialog) { }

      open() {
        if(this.dialogRef) {
          this.dialogRef.close();
        }
        this.dialogRef = this.dialog.open(ModalComponent, {
          panelClass: 'app-dialog'
        });
      }

      close() {
        if(this.dialogRef) {
          this.dialogRef.close();
        }
      }
    }

    // html
    <mat-form-field>
      <mat-label>Favorite car</mat-label>
      <select name="optionsInc"
        matNativeControl 
        [(ngModel)]="optionsInc" 
        (ngModelChange)="onModelChange()">

        <option value="select" [value]="null" [disabled]="true">Select Income</option>
        <option *ngFor="let item of allKeysIncomings" [label]="item.viewValue" 
          [value]="item.value"></option>
      </select>
    </mat-form-field>

    // ts
    @Component({
      selector: 'app-root',
      templateUrl: "./app.component.html",
      styleUrls: ["./app.component.scss"]
    })
    export class AppComponent {
      state = false;
      optionsInc = null;
      allKeysIncomings = [
        {value: 'volvo', viewValue: 'Volvo'},
        {value: 'saab', viewValue: 'Saab'},
        {value: 'mercedes', viewValue: 'Mercedes'}
      ];

      constructor(
        public testDialogService: TestDialogService) {
      }

      onModelChange() {
        this.testDialogService.open();
      }
    }

пример

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