Angular2中Bootstrap界面库ng-bootstrap详解


Posted in Javascript onOctober 18, 2016

准备 Angular 2 环境

ng-bootstrap 是基于 Angular 2 的, 因此需要先准备 Angular 2 的环境。

使用 ng-bootstrap

下载 ng-bootstrap

ng-bootstrap 使用 bootstrap 4.0 alpha2 , 因此需要先下载 bootstrap , 推荐使用 npm 包的形式:

npm install bootstrap@4.0.0-alpha.2 --save

接着下载 ng-bootstrap , 同样使用 npm 包的形式:

npm install @ng-bootstrap/ng-bootstrap --save

修改 systemjs.config.js

现在需要修改一下 systemjs.config.js 文件, 让 SystemJS 能够正确加载 ng-bootstrap :

// map tells the System loader where to look for things
var map = {
 'app':      'dist', // 'dist',
 '@angular':     'node_modules/@angular',
 'angular2-in-memory-web-api': 'node_modules/angular2-in-memory-web-api',
 'rxjs':      'node_modules/rxjs',
 // add ng-bootstrap location map 
 '@ng-bootstrap':    'node_modules/@ng-bootstrap'
};
// packages tells the System loader how to load when no filename and/or no extension
var packages = {
 'app': { main: 'main.js', defaultExtension: 'js', format: 'amd' },
 'rxjs': { defaultExtension: 'js' },
 'angular2-in-memory-web-api': { main: 'index.js', defaultExtension: 'js' },
 // add ng-bootstrap package config
 '@ng-bootstrap/ng-bootstrap': { main: 'index.js', defaultExtension: 'js' }
};

修改 index.html

index.html 文件也要修改一下, 把 bootstrap 的样式表关联进来:

<link rel="stylesheet" href="node_modules/bootstrap/dist/css/bootstrap.css"/>

修改 app.component.ts

还需要修改一下 app.component.ts 文件, 导入 ng-bootstrap 的指令:

import { Component, OnInit } from '@angular/core';
import { HTTP_PROVIDERS } from '@angular/http';
import { provideRouter, ROUTER_DIRECTIVES } from '@angular/router';
// import ng-bootstrap directives
import { NGB_DIRECTIVES, NGB_PRECOMPILE } from '@ng-bootstrap/ng-bootstrap';

import { routes } from './app.routes';

@Component({
 //moduleId: module.id,
 selector: 'app',
 providers: [ HTTP_PROVIDERS ],
 templateUrl: 'dist/app.component.html',
 styleUrls: ['dist/app.component.css'],
 // ng-bootstrap required precompile directives
 precompile: [NGB_PRECOMPILE],
 // add ng-bootstrap directives to app
 directives: [
  ROUTER_DIRECTIVES, NGB_DIRECTIVES
 ],
 pipes: []
})
export class AppComponent implements OnInit {

 ngOnInit() {
 }

}

ng-bootstrap 以指令 (directive) 的形式提供组件, 方便在 html 视图中使用, 选择器 (selector) 使用同一的前缀 ngb , 类名则统一使用 Ngb 前缀。

接下来就可以使用 ng-bootstrap 的组件了, 接下来以 NgbAlert 为例说明 ng-bootstrap 的用法。

NgbAlert 的 selector 是 ngb-alert , 支持的 Input 有 dismissible 和 type , Output 有 close 。

接下来看一个 NgbAlert 的例子:

<p>
 <ngb-alert [dismissible]="false">
 <strong>Warning!</strong> Better check yourself, you're not looking too good.
 </ngb-alert>
</p>

显示效果如下:

Angular2中Bootstrap界面库ng-bootstrap详解

再来一个稍微复杂一点儿的, 在 app.component.ts 文件中添加下面的代码:

export class AppComponent implements OnInit {

 alert: IAlert[];

 ngOnInit() {
  this.alert = [
   {
    id: 1,
    type: 'success',
    message: 'This is an success alert',
   },
   {
    id: 2,
    type: 'info',
    message: 'This is an info alert',
   },
   {
    id: 3,
    type: 'warning',
    message: 'This is a warning alert',
   },
   {
    id: 4,
    type: 'danger',
    message: 'This is a danger alert',
   }
  ];
 }

 closeAlert(alert: IAlert) {
  const index: number = this.alerts.indexOf(alert);
  this.alerts.splice(index, 1);
 }
}

interface IAlert {
 id: number;
 type: string;
 message: string;
}

在对应的 html 文件中添加 *ngFor 指令, 绑定 alerts 数组:

<p *ngFor="let alert of alerts">
 <ngb-alert
  [type]="alert.type"
  (close)="closeAlert(alert)">\{\{ alert.message }}
 </ngb-alert>
</p>

现在得到的效果如下图所示:

Angular2中Bootstrap界面库ng-bootstrap详解

ng-bootstrap 还有更多的组件, 就不一一列举了。

总结

实现 ng-bootstrap 的人还是原来做 angular-ui 的那些人, 可以说配方还是原来的配方, 但是这味道么就跟原来有很大的不同了, 完全切换到了 Angular2 的风格。

不过总的来说, ng-bootstrap 的推出将会极大的推进 Angular 2 在实际项目中的应用, 而不只是停留在 demo 阶段, 因为 AngularJS 1.x 时期, 很多项目都是以 AngularJS + UI-Bootstrap 为基础的, 现在有了 Angular 2 的 ng-bootstrap , 相信已经由很多人蠢蠢欲动了吧!以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

Javascript 相关文章推荐
jquery插件之easing 动态菜单
Aug 21 Javascript
javaScript(JS)替换节点实现思路介绍
Apr 17 Javascript
jquery 操作iframe的几种方法总结
Dec 13 Javascript
jquery数组封装使用方法分享(jquery数组遍历)
Mar 25 Javascript
11种ASP连接数据库的方法
Sep 18 Javascript
Js 获取当前函数参数对象的实现代码
Jun 20 Javascript
基于jQuery Easyui实现登陆框界面
Jul 10 jQuery
vue router+vuex实现首页登录验证判断逻辑
May 17 Javascript
利用JavaScript缓存远程窃取Wi-Fi密码的思路详解
Nov 05 Javascript
JS实现指定区域的全屏显示功能示例
Apr 25 Javascript
js实现提交前对列表数据的增删改查
Jan 16 Javascript
Vue中使用import进行路由懒加载的原理分析
Apr 01 Vue.js
微信小程序 教程之事件
Oct 18 #Javascript
微信小程序 教程之模板
Oct 18 #Javascript
微信小程序 教程之列表渲染
Oct 18 #Javascript
微信小程序 教程之条件渲染
Oct 18 #Javascript
微信小程序 教程之数据绑定
Oct 18 #Javascript
vue.js通过自定义指令实现数据拉取更新的实现方法
Oct 18 #Javascript
微信小程序 教程之WXML
Oct 18 #Javascript
You might like
PHP 5.0对象模型深度探索之对象复制
2008/03/27 PHP
php print EOF实现方法
2009/05/21 PHP
Yii学习总结之数据访问对象 (DAO)
2015/02/22 PHP
php制作基于xml的RSS订阅源功能示例
2017/02/08 PHP
PHP培训要多少钱
2017/06/06 PHP
javascript div 遮罩层封锁整个页面
2009/07/10 Javascript
firefox下frameset取不到值的解决方法
2010/09/06 Javascript
使用js显示当前时间示例
2014/03/02 Javascript
node.js中的forEach()是同步还是异步呢
2015/01/29 Javascript
JavaScript实现简单的数字倒计时
2015/05/15 Javascript
JavaScript实现点击按钮切换网页背景色的方法
2015/10/17 Javascript
JavaScript获取页面中超链接数量的方法
2015/11/09 Javascript
探索Vue.js component内容实现
2016/11/03 Javascript
详解微信小程序入门五: wxml文件引用、模版、生命周期
2017/01/20 Javascript
JS实现数组去重复值的方法示例
2017/02/18 Javascript
Angular企业级开发——MVC之控制器详解
2017/02/20 Javascript
详解Vue、element-ui、axios实现省市区三级联动
2019/05/07 Javascript
[03:53]2016国际邀请赛中国区预选赛第三日TOP10精彩集锦
2016/06/29 DOTA
Python基于Tkinter的HelloWorld入门实例
2015/06/17 Python
Python3导入自定义模块的三种方法详解
2018/04/13 Python
《与孩子一起学编程》python自测题
2018/05/27 Python
python批量下载网站马拉松照片的完整步骤
2018/12/05 Python
Python实现RGB与HSI颜色空间的互换方式
2019/11/27 Python
Python类的绑定方法和非绑定方法实例解析
2020/03/04 Python
联想西班牙官网:Lenovo西班牙
2018/08/28 全球购物
C# .NET面试题
2015/11/28 面试题
中专生自荐信
2013/10/12 职场文书
记者岗位职责
2014/01/06 职场文书
打架检讨书100字
2014/01/08 职场文书
端午节粽子促销活动方案
2014/02/02 职场文书
党组织公开承诺书
2014/03/29 职场文书
负责培养人意见
2015/06/05 职场文书
大学毕业谢师宴致辞
2015/07/27 职场文书
七年级话题作文之执着
2019/11/19 职场文书
python自动化测试通过日志3分钟定位bug
2021/11/20 Python
Android开发 使用文件储存的方式保存QQ密码
2022/04/24 Java/Android