javascript - 按钮禁用且 ngIf 在相同条件下工作

标签 javascript html angular angular-material

我创建了一个 Material 对话框,并在 *ngIf 和按钮 [disabled] 属性内调用相同的方法两次。

我的 Material 对话框:

<div mat-dialog-content>
 <p>Insert package name:</p>
  <mat-form-field>
   <mat-label class="font-weight-bold">Package name</mat-label>
   <input matInput #newPackageName>
  </mat-form-field>
</div>
<ng-container *ngIf="existPackageName(newPackageName.value)">
 <p class="alert alert-danger" role="alert">Exist package with same name!!!</p>
</ng-container>
<div mat-dialog-actions>
 <button mat-button class="btn btn-secondary" [mat-dialog-close]="newPackageName.value" cdkFocusInitial [disabled]="existPackageName(newPackageName.value)">Create
 </button>
 <button mat-button class="btn btn-secondary" (click)="onNoClick()">Cancel</button>
</div>

我的 typescript :


    @Component({
      selector: 'new-package-dialog',
      templateUrl: './new-package/new-package-dialog.component.html',
      styleUrls: ['app.component.css']
    })
    export class NewPackageDialog {

      constructor(
        public dialogRef: MatDialogRef,
        @Inject(MAT_DIALOG_DATA) public data: DialogData) {
      }

      onNoClick(): void {
        this.dialogRef.close();
      }

      existPackageName(newPackageName: string) {
        return newPackageName.length > 0 && this.data.packages.some(package => package.name === newPackageName);
      }
    }

    export interface DialogData {
      packages: IPackage[];
    }

问题:有没有办法调用一次方法 existPackageName(newPackageName.value) 并将结果传递给按​​钮 [disabled] 属性?

最佳答案

您可以在组件中包含:

this.shouldDisable = this.existPackageName(this.newPackageName)

然后简单地:

<input matInput [(ngModel)]="newPackageName">
... 
<ng-container *ngIf="shouldDisable">
...
<button [disabled]="shouldDisable" ..rest of the properties>

关于javascript - 按钮禁用且 ngIf 在相同条件下工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61245873/

相关文章:

javascript - Angular Google map - map 控件中的双向数据绑定(bind)

javascript - document.getElementsByClassName() 不工作

jquery - 下拉选择不显示表单

html - 为什么我不能在输入字段中选择和输入数据?

angular - 找不到模块 'rxjs-compat/Observable'

javascript - 点击展开div

javascript - 仅针对一个函数的 ajax 调用上的未定义索引

android - 媒体查询和 Android 设备

angularjs - ionic 1 AngularJs 1 与 ionic 2 AngularJs 2?

javascript - Angular 7 动态内容投影