# angular2-layer **Repository Path**: 895925636/angular2-layer ## Basic Information - **Project Name**: angular2-layer - **Description**: 一款基于angular2开发的弹窗组件,致力于实现易用,美观,丰富的弹层效果,动态加载组件的方式,帮开发者简化了组件实现的过程,实现更灵活 - **Primary Language**: TypeScript - **License**: Not specified - **Default Branch**: master - **Homepage**: http://ng2-layer.wemakers.net/index.html - **GVP Project**: No ## Statistics - **Stars**: 10 - **Forks**: 5 - **Created**: 2017-01-07 - **Last Updated**: 2022-04-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README [document](http://ng2-layer.wemakers.net/doc.html) [live demo](http://ng2-layer.wemakers.net/demo.html) # Classes ## NgLayer 可以把NgLayer 看作是一个弹出层的factory。NgLayer能够生成五种类型的弹层,分别对应五个方法(参数具体含义请看代码注释): * dialog(config:LayerConfig):NgLayerRef,可以用自定义的ComponentClass定义对话框的内容 * alert(config:LayerConfig):NgLayerRef,创建alert弹窗,解决原生弹窗不好看或者和网站风格不搭 * confirm(config:LayerConfig):NgLayerRef,创建confirm弹窗,解决原生弹窗不好看或者和网站风格不搭 * tip(config:LayerConfig):NgLayerRef,生成一个消息提示弹层 * loading(config:LayerConfig):NgLayerRef,生成一个提示加载中(等待)的弹层 ```TypeScript export class NgLayer { /** * open a dialog window * @return {NgLayerRef} */ dialog(config:LayerConfig):NgLayerRef /** * open a alert window * * @return {NgLayerRef} */ alert(config:LayerConfig):NgLayerRef /** * open a confirm window * * @return {NgLayerRef} */ confirm(config:LayerConfig):NgLayerRef /** * open a message layer * * @return {NgLayerRef} */ tip(config:LayerConfig):NgLayerRef /** * open a loading layer * * @return {NgLayerRef} */ loading(config:LayerConfig):NgLayerRef } ``` ## NgLayerRef NgLayerRef 是对弹出层的一个引用,通过这个引用,可以对弹出层进行操作或者指定事件的回调函数 包含如下方法(参数具体含义请看代码注释): * close():void,关闭弹层,对所有类型的弹出层有效 * showCloseBtn(show:boolean),是否显示关闭按钮,只对dialog有效 * setTitle(title:string):NgLayerRef,设置弹窗的标题,只适用于dialog * setMessage(message:string):NgLayerRef,提示消息,对除了dialog之外的弹层有效 * setOkText(ok:string):NgLayerRef,更改“确定”按钮的文本,对alert、confirm有效 * setCancelText(cancel:string):NgLayerRef,更改“取消”按钮的文本,对confirm有效 * setOnClose(callBack:()=>boolean):NgLayerRef,设置弹层被关闭时候的回调函数,所有类型的弹层有效 * ok(okCallback:()=>boolean):NgLayerRef,设置弹层“确定”按钮被点击时的回调函数,对alert、confirm有效 * cancel(cancelCallback:()=>boolean):NgLayerRef,设置弹层“取消”按钮被点击时的回调函数,对confirm有效 ```TypeScript class NgLayerRef{ /** * destory the layer. */ close(); /** * show close button or not */ showCloseBtn(show:boolean):NgLayerRef /** * update dialog title. for dialog only * * @return {NgLayerRef} */ setTitle(title:string):NgLayerRef /** * update message of layer * * e.g. * * ```typescript * let tip = this.ly.tip("保存成功", 1000, "top", "warn"); * setTimeout(()=>{ * lyRef.setMessage("successfully saved").setTipType("success"); * lyRef.close(); * }, 2000); * * ``` * @return {NgLayerRef} */ setMessage(message:string):NgLayerRef /** * if the callBack return ture, the layer will be closed * * e.g. * * ```typescript * let lyRef = this.ly.confirm("are you sure?", "yes", "no"); * lyRef.setOnClose(()=>{ * if(...) return true; * }); * ``` * @return {NgLayerRef} */ setOnClose(callBack:()=>boolean):NgLayerRef /** * update "ok" button text, for alert layer or confirm layer * * e.g. * * ```typescript *let lyRef = this.ly.confirm("are you sure?", "yes", "no"); *lyRef.setOkText("sure"); * ``` * @return {NgLayerRef} */ setOkText(ok:string):NgLayerRef /** * update "cancel" button text, for confirm layer only * * e.g. * * ```typescript *let lyRef = this.ly.confirm("are you sure?", "yes", "no"); *lyRef.setCancelText("not sure"); * ``` * @return {NgLayerRef} */ setCancelText(cancel:string):NgLayerRef /** * okCallback called on 'ok' button click. for alert layer or confirm layer * * e.g. * * ```typescript *let lyRef = this.ly.confirm("are you sure?", "yes", "no"); *lyRef.ok(()=>{ * ...do something... * }); * ``` * @return {NgLayerRef} */ ok(okCallback:()=>boolean):NgLayerRef /** * cancelCallback called on "cancel" button click. for confirm layer only * * e.g. * * ```typescript *let lyRef = this.ly.confirm("are you sure?", "yes", "no"); *lyRef.ok(()=>{ * ...do something... * }); * ``` * * @return {NgLayerRef} */ cancel(cancelCallback:()=>boolean):NgLayerRef } ``` ## LayerConfig LayerConfig 是弹出层的配置类 * parent:ViewContainerRef,dialog的父组件,如果定义了parent,dialog内部的组件将成为parent的子组件,否则成为根组件 * dialogComponent:any,dialog 内容部分的Component 类 * title:string,dialog的标题 * closeAble:boolean,dialog是否显示关闭按钮 * message:string,tip,loading,alert,confirm弹层的提示文字 * okText:string,确定按钮的文本 * cancelText:string,取消按钮的文本 * align:string,定义 loding和tip弹层的位置,可选值有:top, center, bottom * isModal:boolean,是否模态,只适用于loading 弹层 * tipDuration:number,tip 弹层的持续时间, 经过指定的时间之后,弹层会自动关闭,单位:毫秒(ms) * inSelector:string,配置弹层弹出时候的转场效果,实际上是为弹层指定一个class选择器,默认提供可选的值有:rollIn, fallDown, fadeInDown, runIn, bounceIn, splatIn, dropDown, vanishIn, spaceIn, jelly, fadeInUp, * outSelector:string,配置弹层关闭时候的转场效果,实际上是为弹层指定一个class选择器,以便运用动画。默认提供可选的值有:rollOut, fadeOutDown, bounceOut, vanishOut, spaceOut, boingOut, fadeOutDown ```TypeScript export class LayerConfig { /** * the new component will be a child of parent, if parent is null, * new component will be a root component of application. * valid only for dialog leyer */ parent:ViewContainerRef; /** * a class for creating new component * valid only for dialog leyer */ dialogComponent:any; /** * dialog title * valid only for dialog leyer */ title:string; /** * show close button or not. * valid only for dialog leyer */ closeAble:boolean; /** * message type of tip layer. * valid for alert, confirm, tip, loading leyer */ message:string; /** * text of "ok" button. * valid for alert or confirm leyer */ okText:string; /** * text of "cancel" button * valid only for confirm leyer */ cancelText:string; /** * position of the layer("top", "center", "bottom"), default to "top" * valid only for loading or tip leyer */ align:string; /** * modal window or not * valid only for loading leyer */ isModal:boolean; /** * layer will be automatic closed after duration(ms) * valid only for tip leyer */ tipDuration:number; /** * defined a popup animation by a class selector * valid for all type leyer. * * existing options: * rollIn, fallDown, fadeInDown, runIn, bounceIn, * splatIn, dropDown, vanishIn, spaceIn, jelly, fadeInUp, */ inSelector:string; /** * defined a closeing animation by a class selector * valid for all type leyer. * * existing options: * rollOut, fadeOutDown, bounceOut, vanishOut, spaceOut, * boingOut, fadeOutDown */ outSelector:string; } ``` #Usage ##step 1 config systemjs.config.js ```JavaScript (function(global) { System.config({ paths: {'npm:': 'node_modules/'}, map: { ... "ng2Layer":"npm:angular2-layer/ng2-layer.min.js" } }); })(this); ``` ##step 2 import css ```html ... ... ``` ##step 3 use it ```TypeScript ··· import {NgLayer, NgLayerRef} from "ng2Layer"; @Component(···) export class AppComponent { constructor(private ly:NgLayer, private vcRef:ViewContainerRef) { let dialog = ly.dialog(···); let alert = ly.alert(···); let confirm = ly.confirm(···); let loading = ly.loading(···); let tip = ly.tip(···); } } ``` #Demo code talk is cheape, show you my code ##app.ts ```TypeScript import {Component,NgModule,ViewContainerRef,enableProdMode} from '@angular/core' import {BrowserModule} from '@angular/platform-browser'; import {platformBrowserDynamic} from '@angular/platform-browser-dynamic'; import {NgLayer, NgLayerRef} from "../../ng2-layer.js"; enableProdMode(); class DataShare { somedata:any; } @Component({ selector: '.app', templateUrl: 'temp/app.html', providers: [NgLayer, DataShare] }) export class AppComponent { constructor(private ly:NgLayer, private vcRef:ViewContainerRef, private data:DataShare) { data.somedata = "水牛叔叔"; } dialog() { //dynamic component class @Component({templateUrl: "temp/dialog.html"}) class DialogComponet { constructor(private ly:NgLayerRef, private data:DataShare){} setTitle(){this.ly.setTitle("Angular2 Layer Title");} close(){this.ly.close();} showCloseBtn(){this.ly.showCloseBtn(true)}; } /** * if parent is provided, * the new component will be a child of parent component */ let dialog = this.ly.dialog({ parent:this.vcRef, dialogComponent:DialogComponet, closeAble:false }); } alert(){ let alert = this.ly.alert({ message:"所有工作已经完成", }); alert.ok(()=> {return true;}); } confirm(){ let confirm = this.ly.confirm({ message:"删除后无法恢复,确定删除吗?" }); confirm .ok(()=> {return true;}) .cancel(()=> {return true;}); } loading(){ let loading = this.ly.loading({message:"loading...",isModal:true}); setTimeout(()=>loading.setMessage("再等一会..."), 2000); setTimeout(()=>loading.close(), 4000); } tip(){ let tip = this.ly.tip({ message:"saving...", align:"top" }); setTimeout(()=>{ tip.setMessage("successfully saved").setTipType("success"); }, 1000) } } @NgModule({ imports: [BrowserModule], declarations: [AppComponent], bootstrap: [AppComponent], providers:[DataShare] }) class AppModule {} platformBrowserDynamic().bootstrapModule(AppModule); ``` ##index.html ```html angular2 playground
loaing...
``` ##app.html template of app Component ```html ``` ##dialog.html template of dialog Component ```html
``` #Live demo code is cheape, here is the [live demo](http://ng2-layer.wemakers.net/demo.html)