使用Angular CDK实现一个Service弹出Toast组件功能

目录
  • 1.环境安装
  • 2.创建Toast组件和ToastService
    • 2.1编写Toast组件和样式

在Angular中,官方团队在开发Material组件库的同时,顺手做了一套Component dev kit,也就是在Angular世界中大名鼎鼎的CDK,这套工具包提供了非常多的前端开发的通用功能。Angular的知名组件库几乎都依赖了这套开发包。比如ANT,PrimeNG等。

本文主要写用cdk实现一个简单的Toast组件,使用的是cdk中的overlay模块。

1.环境安装

cdk不是angular的默认模块,需要手动安装 yarn add @angular/cdk

在app.module中引入cdk中的OverlayModule

import { OverlayModule } from '@angular/cdk/overlay';

@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    BrowserModule,
    OverlayModule
  ],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule { }

2.创建Toast组件和ToastService

  • 使用ng g c Toast命令快速创建一个组件模版
  • 使用ng g s Toast创建一个Service的模版

2.1编写Toast组件和样式

ToastComponent

<div class="q-toast">
    <div class="q-toast-mask"></div>
    <p class="q-toast-msg">{{msg}}</p>
</div>

.q-toast {
  padding: .2rem .5rem;
  width: 5rem;
  position: relative;
  display: flex;
  flex-direction: row;
  align-items: center;
  justify-content: center;

  .q-toast-mask {
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    background-color: #000;
    opacity: .8;
    border-radius: 2rem;
  }

  .q-toast-msg {
    color: white;
    z-index: 999;
  }
}

ToastService

import { Overlay, OverlayConfig } from '@angular/cdk/overlay';
import { ComponentPortal } from '@angular/cdk/portal';
import { Injectable, InjectionToken, Injector } from '@angular/core';
import { ToastComponent } from './toast.component';

@Injectable({
  providedIn: 'root'
})
export class ToastService {

  constructor(private overlay: Overlay) { }

  Show(msg: string) {
    const config = new OverlayConfig();
    const positionStrategy = this.overlay.position()
      .global().centerVertically().centerHorizontally();
    config.positionStrategy = positionStrategy;
    let overlayRef = this.overlay.create(config);
    const inject = Injector.create({
      providers: [
        {
          provide: Toast_Ref,
          useValue: overlayRef
        },
        {
          provide: Toast_Msg,
          useValue: msg
        }
      ]
    })
    console.log(inject.get<string>(Toast_Ref))
    let partal = new ComponentPortal(ToastComponent, null, inject);
    overlayRef.attach(partal)
    setTimeout(() => {
      overlayRef.detach()
      overlayRef.dispose();
    }, 2000);
  }

}

export const Toast_Ref = new InjectionToken<{}>('Toast_Ref');
export const Toast_Msg = new InjectionToken<{}>('Toast_Msg');

使用Toast

编写好Service后,只需要Angular会默认注入到root模块,只需要在需要弹出Toast的组件的构造方法写上对应的ToastService就可以正常运行了。

export class AppComponent {
  constructor(private toast:ToastService) {
  }
  test() {

    this.toast.Show('hello cdk!')
  }
}

gif效果图

到此这篇关于使用Angular CDK实现一个Service弹出Toast组件的文章就介绍到这了,更多相关Angular CDK 实现Toast组件内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • angular6开发steps步骤条组件

    本文实例为大家分享了angular6开发steps步骤条组件的实现代码,供大家参考,具体内容如下 1.先展示步骤条效果 2.使用angular命令快速创建组件 ng g c component/steps 创建的组件在component文件夹下面 打开steps.component.ts文件,可以看到selector的值是app-steps import { Component, OnInit} from '@angular/core'; @Component({ selector: 'app-

  • Angular 2使用路由自定义弹出组件toast操作示例

    本文实例讲述了Angular 2使用路由自定义弹出组件toast操作.分享给大家供大家参考,具体如下: 原理: 使用Angular2的命名路由插座,一个用来显示app正常的使用,一个用来显示弹出框, <router-outlet name='apps'></router-outlet> <router-outlet name='popup'></router-outlet> 浏览器的导航栏中则这样显示 http://127.0.0.1:4200/(popup

  • 使用Angular material主题定义自己的组件库的配色体系

    本期为Angular系列的第一篇文章,我会从这里搭建Angular sample项目.组件库.主题.然后每个组件等.使之成为一个比较通用的组件库系列文章,目的有二: 1.自己在写系列文章过程中不断夯实基础.不断学习补缺: 2.分享给一些不熟悉angular及自定义组件的同学,使之快速上手并提高. 1. 使用Angular CLI命令行工具生成一个Angular sample的项目:这里添加了一个optional的参数--style=scss,是为了后面使用angular material的the

  • Angular2使用SVG自定义图表(条形图、折线图)组件示例

    本文实例讲述了Angular2使用SVG自定义图表(条形图.折线图)组件.分享给大家供大家参考,具体如下: 要求:用户将数据作为参数传进来,通过类型决定渲染何种类型的图标. demo: html: <ngo-chart [inputParams]="options"></ngo-chart> ts: options = { type: 'line', //图表类型 xAxis: { //X轴的数据 data: ['Mon', 'Tue', 'Wed', 'Thu

  • Angular封装搜索框组件操作示例

    本文实例讲述了Angular封装搜索框组件操作.分享给大家供大家参考,具体如下: 后台管理系统多是以表格和表单为主,有列表就一定会有列表的筛选功能,所以在此把列表头部的搜索功能拆分出一个公共组件,方便使用. 大致样式如下图: 这里我使用的是ng-zorro蚂蚁金服的angular组件库 index.html: <div nz-form class="ant-advanced-search-form"> <nz-row [nzGutter]="24"

  • 通过angular CDK实现页面元素拖放的步骤详解

    通过导入@angular/cdk/drag-drop模块我们可以轻松实现元素在页面中得拖放功能,如元素在页面中随意拖动.在特定区域内拖动亦或对列表进行拖放排序等等. CDK. The Component Dev Kit (CDK) is a set of tools that implement common interaction patterns whilst being unopinionated about their presentation. It represents an abs

  • 使用Angular CDK实现一个Service弹出Toast组件功能

    目录 1.环境安装 2.创建Toast组件和ToastService 2.1编写Toast组件和样式 在Angular中,官方团队在开发Material组件库的同时,顺手做了一套Component dev kit,也就是在Angular世界中大名鼎鼎的CDK,这套工具包提供了非常多的前端开发的通用功能.Angular的知名组件库几乎都依赖了这套开发包.比如ANT,PrimeNG等. 本文主要写用cdk实现一个简单的Toast组件,使用的是cdk中的overlay模块. 1.环境安装 cdk不是a

  • php array_pop()数组函数将数组最后一个单元弹出(出栈)

    复制代码 代码如下: <?php /*函数array_pop():将数组最后一个单元弹出(出栈) * 1.语法:mixed array_pop ( array &array ) * 2.描述: 弹出并返回 array 数组的最后一个单元,并将数组 array 的长度减一.如果 array 为空(或者不是数组)将返回 NULL. * 3.注意事项: * 3.1. */ echo "****************************************************

  • 如何创建一个JavaScript弹出DIV窗口层的效果

    在本教程中,我将用最通俗的语言和最简洁的代码给大家演示如何创建一个JavaScript弹出DIV窗口层的效果. 创建一个弹出DIV窗口可能是现在网站/网页制作中最常碰到的问题之一.传统的JavaScript弹窗已经不适合目前网站的设计理念了,理由有二:首先,不友好--生硬的弹出对话框且伴随着"哐"的一声对用户体验是个很大的挑战:其次,兼容性不够强--有相当多的浏览器屏蔽了这种JS的Alert()方法.于是,一个良好用户体验的网站需要一种更合理的解决方案--使用很少的HTML代码,很少的

  • 移动端 一个简单易懂的弹出框

    先给大家展示下效果图,如果大家感觉还不错,请继续参考实现代码. 关键代码如下所示: function tishi(content,url) { var html = '<div class="xiaoxi none" id="msg" style="z-index:9999;left: 5%;width: 90%;position: fixed;background:none;top:50%;"> <p class="

  • 详解用vue编写弹出框组件

    前言 最近研究了用vue编写弹出框的组件,发现其实这里面的门道还是有很多的.这篇文完全是用来记录总结下最近的学习成果,同时也希望能够帮得上正在学习纠结的你~ps:本文假设你已经了解vue2.0相关框架,因此适合有一定vue2.0基础的同学阅读. 设计组件的思考 其实单纯的编写一个弹出框组件并不难,写一个模板,然后用v-if或者v-show指令还控制组件的出现与消失.真正困扰我的是,这个组件的调用方式,这个问题纠结了我好久. 调研了下资料,有些人建议,直接把组件标签插进模板中,然后通过直接控制组件

  • 前端js弹出框组件使用方法

    下面分享一个js 弹出窗, 分 toast , dialog , load 三种弹窗 , 下面用js css 来实现以下: 首先是js代码 | 采用了 es6 的写法 //公共弹窗加载动画 const DIALOG_TOAST = '1', DIALOG_DIALOG = '2', DIALOG_LOAD = '3', class Dialog { constructor(type = DIALOG_DIALOG, dialogContent = '请求失败', wrapClassName =

  • vue-dialog的弹出层组件

    本文章通过实现一个vue-dialog的弹出层组件,然后附加说明如果发布此包到npm,且能被其他项目使用. 功能说明 多层弹出时,只有一个背景层. 弹出层嵌入内部组件. 弹出层按钮支持回调 源码下载 实现 多层弹出时,只有一个背景层 利用两个组件实现,一个背景层组件(只提供一个背景层,组件名:background.vue),一个弹出层内容管理组件(实现多个内容层的管理,组件名:master.vue). 弹出层嵌入内部组件 使用vue的component组件实现,他可以完美支持. 弹出层按钮支持回

  • 自定义toast外形,多次点击不会总是弹出toast的实现方法

    效果如下所示: 我封装了一个类出来: package com.amt.appstore.widgets; import com.amt.appstore.R; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.widget.TextView; import android.widget.Toast; public class Cu

  • Android开发实现长按返回键弹出关机框功能

    本文实例讲述了Android开发实现长按返回键弹出关机框功能.分享给大家供大家参考,具体如下: 今天刚好在PhoneWindowManager.java下看,当看到长按Home键的功能时,突然想到是不是可以长按back键来弹出关机框. 有想法就试试呗.当然想法是根据长按home键来的,那么我们应该可以模仿长按Home键来做.经过一番实验,貌似好像可以,拿出来给大家分享一下!!! 先找到PhoneWindowManager.java文件,在framework/base/policy/src/com

随机推荐