Angular 2自定义弹出组件toast

原理:
使用Angular2的命名路由插座,一个用来显示app正常的使用,一个用来显示弹出框,

<router-outlet name='apps'></router-outlet>
<router-outlet name='popup'></router-outlet>

浏览器的导航栏中则这样显示

http://127.0.0.1:4200/(popup:toast//apps:login)

路由配置

const rootRoute: Routes = [
{
    path: 'lists',
    component: Lists,
    outlet: 'apps',
    children: [ ... ]
},
{
    path: 'toast',
    component: Toast,
    outlet: 'popup',
},
...
];

toast内容

<div class="box">
    <div class="toast-box">
        <p class="toast-title">提示</p>
        <div class="toast-content">
            <ng-container *ngIf="toastParams.img">
                <img src="{{toastParams.img}}" class="toast-content-img">
            </ng-container>
            <ng-container *ngIf="toastParams.title">
                <p class="toast-content-p">{{toastParams.title}}</p>
            </ng-container>
        </div>
    </div>
</div>

ts

在ngOninit函数中获取显示的参数即可
this.toastParams = this.popupSVC.getToastParams();

创建用来跳转至popup路由的服务,例如popup.service

import { Injectable } from '@angular/core';
import { Router } from '@angular/router';


@Injectable()
export class PopupService {
    private toastParams;
    private loadingParams;

    constructor(
        private router: Router
    ) { }

    toast(_params) {
        this.toastParams = _params;
        let _duration;
        if (_params.duration) {
            _duration = _params.duration;
        } else {
            _duration = 500;
        }
        const _outlets = { 'popup': 'toast' };
        this.router.navigate([{ outlets: _outlets }]);
        setTimeout(() => {
            const _outlets2 = { 'popup': null };
            this.router.navigate([{ outlets: _outlets2 }]);
        }, _duration);
    }
    getToastParams() {
        return this.toastParams;
    }
}

使用:
一、在app.module.ts中将服务导进来,注册

import { PopupService } from './svc/popup.service';

@NgModule({
    imports: [
        ...
    ],
    declarations: [
    ...
    ],
    providers: [
       PopupService,
    ...
    ],
    bootstrap: [AppComponent]
})

二、在使用的test.ts中导入

import { PangooService } from './svc/pangoo.service';
constructor(
    private popupSVC: PopupService,
) { }

三、在html中定义一个函数

<div (click)="test()"></div>

四、调用

test(){   
    this.popupSVC.toast({
        img: '弹出图片地址!',
        title: '弹出消息内容!',
        duration: 2000,  //toast多久后消失,默认为500ms
    });
}

猜你喜欢

转载自blog.csdn.net/zhy13087344578/article/details/80930564