Angular2學(xué)習(xí)筆記-ng bootstrap中motal組件使用

ng bootstrap是一個angular UI bootstrap庫上鞠,里面包含了一些基本的UI組件(日期選擇組件,按鈕嘲驾,下拉框等)绢要。目前的版本為v1.0.0-alpha.14,基于angular2和bootstrap4蓄拣。因?yàn)樵陧椖恐幸玫綇棾龃翱谘镄椋囍鴩L試了下該庫中的motal組件,效果還不錯球恤,因此這里做個記錄辜昵。

基本的TypeScripe類

NgbModal

用來打開motal窗口的服務(wù),可以采用依賴的方式直接注入到我們定義的組件中咽斧。該類僅有一個open(content: any, options: NgbModalOptions):NgbModalRef方法堪置,該方法接收一個content參數(shù):該參數(shù)包含窗口的內(nèi)容;和一個可選的options參數(shù):該參數(shù)定義了窗口的一些特性张惹,如尺寸舀锨、樣式、點(diǎn)擊背景關(guān)閉窗口等宛逗。

NgbModalOptions

這是一個接口的定義坎匿,有四個屬性:

  • backdrop: boolean | 'static' 是否為窗口生成一個背景,'static'時生成的背景在點(diǎn)擊窗口是不會關(guān)閉窗口。
  • keyboard: boolean 是否按ESC鍵時替蔬,關(guān)閉窗口告私。
  • size: 'lg' | 'sm' 默認(rèn)是中等大小,lg為大窗口承桥,sm為小窗口驻粟。
  • windowClass: string 用戶自定義的窗口樣式。

NgbModalRef

一個新打開的modal窗口引用凶异,NgbModal調(diào)用open方法時會返回一個該對象引用蜀撑,有兩個重要的屬性和兩個方法。

  • componentInstance 在open方法中傳入的content為組件時的組件實(shí)例剩彬,若content不為組件是則為 undefined屯掖。
  • rusult 一個promise對象,窗口關(guān)閉和銷毀時會觸發(fā)襟衰。
  • close 關(guān)閉一個窗口贴铜,窗口扔存在DOM中。
  • dismiss 銷毀窗口瀑晒。

NgbActiveModal

當(dāng)前打開窗口的引用绍坝,包含close和dismiss方法。

modal使用

首先需要angular2及bootstrap4的支持苔悦,一般使用npm進(jìn)行管理轩褐。bootstrap也可以直接引入CDN的鏈接,具體看官網(wǎng)玖详。

1.安裝ng bootstrap:
npm install --save @ng-bootstrap/ng-bootstrap
2.引入NgbModule模塊
在angular2根模塊中引入時把介,需添加forRoot()方法
imports: [NgbModule.forRoot(), ...]
特性模塊中,則不需要
imports: [NgbModule, ...]
3.編寫一個窗口模塊組件modal-basic.compont.ts

import { Component, OnInit } from '@angular/core';
import {NgbModal, ModalDismissReasons} from '@ng-bootstrap/ng-bootstrap';


@Component({
  selector: 'app-modal-basic',
  templateUrl: './modal-basic.component.html',
  styleUrls: ['./modal-basic.component.css']
})
export class ModalBasicComponent implements OnInit {

  closeResult: string;

  constructor(private modalService: NgbModal) {}

  open(content) {
    this.modalService.open(content).result.then((result) => {
      this.closeResult = `Closed with: ${result}`;
    }, (reason) => {
      this.closeResult = `Dismissed ${this.getDismissReason(reason)}`;
    });
  }

  private getDismissReason(reason: any): string {
    if (reason === ModalDismissReasons.ESC) {
      return 'by pressing ESC';
    } else if (reason === ModalDismissReasons.BACKDROP_CLICK) {
      return 'by clicking on a backdrop';
    } else {
      return  `with: ${reason}`;
    }
  }

  ngOnInit() {
  }
}

組件包含一個NgbModal的服務(wù)蟋座,調(diào)用該服務(wù)的open方法即可打開窗口拗踢。結(jié)合組件頁面來看:

<template #content let-c="close">
  <div class="modal-header">
    <button type="button" class="close" aria-label="Close" (click)="dismiss('Cross click')">
      <span aria-hidden="true">×</span>
    </button>
    <h4 class="modal-title">Modal title</h4>
  </div>
  <div class="modal-body">
    <p>One fine body…</p>
  </div>
  <div class="modal-footer">
    <button type="button" class="btn btn-secondary" (click)="c('Close click')">Close</button>
  </div>
</template>

<button class="btn btn-lg btn-outline-primary" (click)="open(content)">Launch demo modal</button>

<hr>

<pre>{{closeResult}}</pre>

1.template定義了窗口的內(nèi)容,在不打開窗口的情況下向臀,內(nèi)容是隱藏的巢墅。注意該模板添加了一個content變量,在調(diào)用open方法時傳入券膀。
2.定義了一個按鈕君纫,當(dāng)點(diǎn)擊時調(diào)用modal-basic組件的open方法,在該方法中調(diào)用NgbModal的open方法芹彬,打開窗口蓄髓。

4.使用modal窗口

<div class="container-fluid">
    <hr>
    <p>
        This is a demo plnkr forked from the <strong>ng-bootstrap</strong> project: Angular 2 powered Bootstrap.
        Visit <a  target="_blank">https://ng-bootstrap.github.io</a> for more widgets and demos.
    </p>
    <hr>

    <template ngbModalContainer></template>

    <app-modal-basic></app-modal-basic>
</div>

注意添加<template ngbModalContainer></template>元素,ngbModalContainer指令用來標(biāo)記modal窗口在頁面中打開的位置舒帮。
另外<template ngbModalContainer></template>需要添加到跟組件中会喝,應(yīng)用才能正常工作眨唬。

后記

當(dāng)然不要忘了把modal-basic組件在模塊中聲明,這里假設(shè)你一了解基本的angular2知識好乐。本文主要翻譯在ng-bootstrap的使用手冊,建議你直接看原文檔瓦宜。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蔚万,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子临庇,更是在濱河造成了極大的恐慌反璃,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件假夺,死亡現(xiàn)場離奇詭異淮蜈,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)已卷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進(jìn)店門梧田,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人侧蘸,你說我怎么就攤上這事裁眯。” “怎么了讳癌?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵穿稳,是天一觀的道長。 經(jīng)常有香客問我晌坤,道長逢艘,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任骤菠,我火速辦了婚禮它改,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘商乎。我一直安慰自己搔课,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布截亦。 她就那樣靜靜地躺著爬泥,像睡著了一般。 火紅的嫁衣襯著肌膚如雪崩瓤。 梳的紋絲不亂的頭發(fā)上袍啡,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天,我揣著相機(jī)與錄音却桶,去河邊找鬼境输。 笑死蔗牡,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的嗅剖。 我是一名探鬼主播辩越,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼信粮!你這毒婦竟也來了黔攒?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤强缘,失蹤者是張志新(化名)和其女友劉穎督惰,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體旅掂,經(jīng)...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡赏胚,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了商虐。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片觉阅。...
    茶點(diǎn)故事閱讀 39,926評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖秘车,靈堂內(nèi)的尸體忽然破棺而出留拾,到底是詐尸還是另有隱情,我是刑警寧澤鲫尊,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布痴柔,位于F島的核電站,受9級特大地震影響疫向,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜搔驼,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一谈火、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧舌涨,春花似錦糯耍、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至扭粱,卻和暖如春舵鳞,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背琢蛤。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工蜓堕, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留抛虏,地道東北人。 一個月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓套才,卻偏偏與公主長得像迂猴,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子背伴,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,871評論 2 354

推薦閱讀更多精彩內(nèi)容