Angular系列二 可复用UI

使用服务来统一可复用ui

angular 服务是组件的依赖项,可以把轻提示、删除确认弹出框,上传按钮弹出框抽象成服务,由服务来触发可复用组件。

import { Injectable } from '@angular/core';
import { MatSnackBar } from '@angular/material/snack-bar';
import { MatDialog } from '@angular/material/dialog';
import { DeleteConfirmComponent } from "src/app/ui/dialog/delete-confirm/delete-confirm.component";
import { UploadComponent } from "src/app/ui/dialog/upload/upload.component";
@Injectable({
  providedIn: 'root'
})
export class UiService {

  constructor(
    public snackBar: MatSnackBar,
    public dialog: MatDialog,
    ) { }
  // 轻提示不依赖于组件,在定制的时候需要在根scss文件中定义
  showSnackBarWith(message, action=null){
    this.snackBar.open(message, action, {
      duration: 2000,
    });
  }

  showDeleteConfirmWith(content,title="删除"){
    const dialogRef = this.dialog.open(DeleteConfirmComponent, {
      width: '300px',
      data: { title, content}
    });
    return dialogRef;
    // 使用
    // dialogRef.afterClosed().subscribe(result => {
    //   if(result){
    //    console.log("点击了删除按钮");
    //    const id = row.id;
    //    this.userSql.deleteUser(id).subscribe(_ => {
    //       this.uiService.showSnackBarWith("删除成功");
    //       this.findAll();
    //     });
    //   }
    //  });
  }

  showUploadWith(condition=null,title="上传"){
    const dialogRef = this.dialog.open(UploadComponent, {
      width: '300px',
      data: { title }
    });
    return dialogRef;
    // 使用同上
  }
}

删除确认弹出框

// ts
import { Component, Inject } from '@angular/core';
import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';

@Component({
  selector: 'app-delete-confirm',
  templateUrl: './delete-confirm.component.html',
  styleUrls: ['./delete-confirm.component.scss']
})
export class DeleteConfirmComponent {

  yes: boolean = true;
  constructor(
    public dialogRef: MatDialogRef<DeleteConfirmComponent>,
    @Inject(MAT_DIALOG_DATA) public data: any
    ) {}

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

// html
<h1 mat-dialog-title>{{data.title}}</h1>
<div mat-dialog-content>
    {{data.content}}
</div>
<div mat-dialog-actions class="actions">
  <button mat-button (click)="onNoClick()"></button>
  <button mat-flat-button color="warn" [mat-dialog-close]="yes" cdkFocusInitial></button>
</div>

// scss
.actions{
    display: flex;
    flex-direction: row;
    justify-content: flex-end;
}

上传文件弹出框

// ts
import { Component, OnInit, Inject } from '@angular/core';
import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';

@Component({
  selector: 'app-upload',
  templateUrl: './upload.component.html',
  styleUrls: ['./upload.component.scss']
})
export class UploadComponent {

  yes: boolean = true;
  constructor(
    public dialogRef: MatDialogRef<UploadComponent>,
    @Inject(MAT_DIALOG_DATA) public data: any
    ) {}

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

// html
<h1 mat-dialog-title>{{data.title}}</h1>
<div mat-dialog-content>
    <button mat-icon-button color="accent">
        <mat-icon color="primary" aria-label="Example icon-button with a heart icon">cloud_upload</mat-icon>
    </button>
</div>
<div mat-dialog-actions class="actions">
  <button mat-button (click)="onNoClick()"></button>
  <button mat-flat-button color="primary" [mat-dialog-close]="yes" cdkFocusInitial></button>
</div>

// scss
.actions{
    display: flex;
    flex-direction: row;
    justify-content: flex-end;
}

轻提示

// styles.scss
::ng-deep .mat-snac-bar {
    background: rgba(97,97,97,0.9);
    padding: 2px 2px 2px 2px;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值