Angular2 Material2 封装组件 —— confirmDialog确定框

环境:

Angular 4.0.0
Angular2 Material2 2.0.0-beta.3
node v7.4.0
npm 4.0.5

使用Dialog封装confirmDialog确定框

源代码

来,首先来看效果图~

删除例子
Angular2 Material2 封装组件 —— confirmDialog确定框_第1张图片
确定删除框
点击确定后返回值

1.定义通用确定框组件

confirmDialog.component.html

{{ config.title || '确认操作' }}

{{ config.content }}
配置项 描述
config.title 可配置,默认为“ 确定操作 ”。确定框的标题。
config.content 需配置。确定框的提示内容。
config.button 可配置,默认为“ 确定 ”。操作按钮的文字。
confirmDialog.component.ts
import { Component, OnInit, Inject } from '@angular/core';
import { MdDialogRef } from '@angular/material';
import {MD_DIALOG_DATA} from '@angular/material';


@Component({
    selector: 'confirm-dialog',
    styleUrls: ['confirmDialog.component.scss'],
    templateUrl: 'confirmDialog.component.html'
})

export class ConfirmDialogComponent implements OnInit {
    config : {};
    
    constructor(private mdDialogRef : MdDialogRef, @Inject(MD_DIALOG_DATA) data: any){
        this.config = data;
    }
    public ngOnInit() { }
}
confirmDialog.component.scss
.md-dialog-title-close:hover{
    cursor: pointer;
}
.confirm-dialog-operate{
    margin-bottom: 0;
    margin-top: 15px;
    align-items: center;
    justify-content: center;
}
.confirm-dialog-cancel{
    margin-left: 20px;
}

2.在app.module.ts引入组件

import { ConfirmDialogComponent } from './confirmDialog/confirmDialog.component';

@NgModule({
    declarations: [
        ···
        ConfirmDialogComponent,
        ···
    ],
    entryComponents: [
        ···
        ConfirmDialogComponent,
        ···
    ]
})
export class AppModule { }

3.把组件注入到服务

为了通用,把组件注入服务,方便在其他地方使用。这样的话,就不用在每次使用的时候重新定义组件。

confirmDialog.service.ts
import { Component, Inject, Injectable } from '@angular/core';
import { DOCUMENT } from '@angular/platform-browser';
import { MdDialog, MdDialogRef, MdDialogConfig } from '@angular/material';
import { ConfirmDialogComponent } from './confirmDialog.component';
import { Observable } from 'rxjs/Observable';

export class confirmDialogService {

    constructor( @Inject(MdDialog) public _confirmDialog: MdDialog, @Inject(DOCUMENT) doc: any) {
        // 打开dialog,body添加no-scroll样式
        _confirmDialog.afterOpen.subscribe((ref: MdDialogRef) => {
            if (!doc.body.classList.contains('no-scroll')) {
                doc.body.classList.add('no-scroll');
            }
        });
        // 关闭dialog,body移除no-scroll样式
        _confirmDialog.afterAllClosed.subscribe(() => {
            doc.body.classList.remove('no-scroll');
        });
    }

    public confirm(contentOrConfig: any, title?: string): Observable {
        // 设置dialog的属性,宽度,高度,内容等。
        let config = new MdDialogConfig();
        config = {
            width: '300px',
            height: '200px'
        };
        if (contentOrConfig instanceof Object) {
            config.data = contentOrConfig;
        } else if ((typeof contentOrConfig) === 'string') {
            config.data = {
                content: contentOrConfig,
                title: title
            }
        }
        return this._confirmDialog.open(ConfirmDialogComponent, config).afterClosed();
    }
}

4.使用例子

在需要使用的组件里的provides注册,就可以使用了,例子如下:

confirmDialog-example.component.ts
import { Component, OnInit, ViewEncapsulation, Inject } from '@angular/core';
import { confirmDialogService } from './confirmDialog.service';

@Component({
    selector: 'confirmDialog',
    templateUrl: 'confirmDialog-example.component.html',
    providers: [confirmDialogService]
})


export class DialogExampleComponent implements OnInit {
    lastCloseResult: any;

    public constructor(public _confirmDialogService: confirmDialogService) { }

    public confirm() {
        this._confirmDialogService.confirm({ content: '确认删除吗?' }).subscribe(res => {

            // 返回结果
            if (res) {
                this.lastCloseResult = "删除成功";
            } else {
                return;
            }

        });
    }

    public ngOnInit() { }

}

confirmDialog-example.component.html

Last close result: {{lastCloseResult}}

确定删除后,返回结果: this.lastCloseResult = "删除成功"; 界面即显示删除成功,如上面的效果图示。

就这样完成了封装confirmDialog确定框的组件~

你可能感兴趣的:(Angular2 Material2 封装组件 —— confirmDialog确定框)