如何通过单击下拉列表选项弹出模式

How to pop up a modal from click in dropdown list option

开发者好,我正在使用 angular 在这个应用程序中工作,现在我正在尝试其中一个选项 点击,显示模态标签。 基本上我所做的是创建一个与下拉列表中选择的项目相等的平行模板,并使用 a 标签在这个模板上设置所有逻辑以显示模态,但我猜这不是用户友好的原因,因为额外 clicks.Trying 在选项中设置 a 标签也不可行,因为我的下拉菜单没有 work.Here 模拟我所做的事情:

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,所有这些过程都会执行激活模态的任务,但我想知道是否可以直接从下拉列表中创建该并行引用,而不是创建对下拉列表的并行引用。 我一直在关注社区中的一些类似问题,例如 : 但不适用于我的代码规范。 对此有任何更新的想法吗?提前致谢!!!!!!

如果您 ComponentModalComponent 中有对话框布局,它应该按如下方式工作

    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();
      }
    }

example