2016-05-19 54 views
2

如何使用Bootstrap(或任何其他)组件库? 克里斯托弗·6分钟前如何在Angular 2中使用ng2-bootstrap?

谁能帮助就如何引导包括组件

我试图用bootstrap警报示例代码。我安装了NPM包,并且增加了包装为:

警报的component.ts:

import {Component} from '@angular/core'; 
import {CORE_DIRECTIVES} from '@angular/common'; 
import { AlertComponent } from 'ng2-bootstrap/ng2-bootstrap'; 
@Component({ 
    selector: 'alert-demo', 
    template: ` 
    <alert *ngFor="let alert of alerts;let i = index" [type]="alert.type" dismissible="true" (close)="closeAlert(i)"> 
     {{ alert?.msg }} 
    </alert> 
    <alert dismissOnTimeout="3000">This alert will dismiss in 3s</alert> 
    <button type="button" class='btn btn-primary' (click)="addAlert()">Add Alert</button> 
    `, 
    directives: [AlertComponent, CORE_DIRECTIVES] 
}) 
export class AlertDemoComponent { 
    public alerts:Array<Object> = [ 
    { 
     type: 'danger', 
     msg: 'Oh snap! Change a few things up and try submitting again.' 
    }, 
    { 
     type: 'success', 
     msg: 'Well done! You successfully read this important alert message.', 
     closable: true 
    } 
    ]; 
    public closeAlert(i:number):void { 
    this.alerts.splice(i, 1); 
    } 
    public addAlert():void { 
    this.alerts.push({msg: 'Another alert!', type: 'warning', closable: true}); 
    } 
} 

app.component.ts

import { Component } from '@angular/core'; 
import { Routes, ROUTER_DIRECTIVES } from "@angular/router"; 
import { MessagesComponent } from "./messages/messages.component"; 
import { AuthenticationComponent } from "./auth/authentication.component"; 
import {NavBarComponent} from "./navbar.component" 
import {AlertDemoComponent} from "./alert.component" 
@Component({ 
    selector: 'my-app', 
    template: ` 
      <navbar></navbar> 
      <alert-demo></alert-demo> 
    `, 
    directives: [ROUTER_DIRECTIVES, NavBarComponent,AlertDemoComponent] 
}) 
@Routes([ 
    {path: '/', component: MessagesComponent}, 
    {path: '/auth', component: AuthenticationComponent} 
]) 
export class AppComponent {} 

systemjs.config.js

(function(global) { 

    // map tells the System loader where to look for things 
    var map = { 
     'app':      'js/app', // 'dist', 
     'rxjs':      'js/vendor/rxjs', 
     '@angular':     'js/vendor/@angular' 
    }; 

    // packages tells the System loader how to load when no filename and/or no extension 
    var packages = { 
     'app':      { main: 'boot.js', defaultExtension: 'js' }, 
     'rxjs':      { defaultExtension: 'js' }, 
     "node_modules/ng2-bootstrap": {defaultExtension: 'js'} 
    }; 

    var paths= { 
    "ng2-bootstrap/ng2-bootstrap": "node_modules/ng2-bootstrap/ng2-bootstrap" 
    } 


    var packageNames = [ 
     '@angular/common', 
     '@angular/compiler', 
     '@angular/core', 
     '@angular/http', 
     '@angular/platform-browser', 
     '@angular/platform-browser-dynamic', 
     '@angular/router', 
     '@angular/testing', 
     '@angular/upgrade', 
     'ng2-bootstrap' 
    ]; 

    // add package entries for angular packages in the form '@angular/common': { main: 'index.js', defaultExtension: 'js' } 
    packageNames.forEach(function(pkgName) { 
     packages[pkgName] = { main: 'index.js', defaultExtension: 'js' }; 
    }); 

    var config = { 
     map: map, 
     packages: packages, 
     paths: paths 
    }; 

    // filterSystemConfig - index.html's chance to modify config before we register it. 
    if (global.filterSystemConfig) { global.filterSystemConfig(config); } 

    System.config(config); 

})(this); 

我收到错误

"NetworkError: 404 Not Found - http://localhost:3000/ng2-bootstrap/ng2-bootstrap" 
ng2-bootstrap 
Error: patchProperty/desc.set/[email protected]://localhost:3000/js/vendor/zone.js/dist/zone.js:769:27 
Zone</ZoneDelegate</[email protected]://localhost:3000/js/vendor/zone.js/dist/zone.js:356:24 
Zone</Zone</[email protected]://localhost:3000/js/vendor/zone.js/dist/zone.js:256:29 
ZoneTask/[email protected]://localhost:3000/js/vendor/zone.js/dist/zone.js:423:29 
Error loading http://localhost:3000/ng2-bootstrap/ng2-bootstrap as "ng2-bootstrap/ng2-bootstrap" from http://localhost:3000/js/app/alert.component.js 

回答

2

假设你有你的package.json依赖NG2的自举

"ng2-bootstrap": "^1.0.16", 

而且它安装在你的项目的node_modules,你需要确保在您的index.html中包含ng2-bootstrap库:

<script src="node_modules/ng2-bootstrap/bundles/ng2-bootstrap.min.js"></script> 


一旦你有了这个,你应该从你packageNamessystemjs.config.js其删除:

var packageNames = [ 
     '@angular/common', 
     '@angular/compiler', 
     '@angular/core', 
     '@angular/http', 
     '@angular/platform-browser', 
     '@angular/platform-browser-dynamic', 
     '@angular/router', 
     '@angular/testing', 
     '@angular/upgrade' 
    ]; 


此外,NG2的自举对moment.js的依赖,这意味着你还需要将其包含在您的依赖项中:

"moment": "^2.13.0" 

而且你还d更新您的systemjs.config.js包含映射:

var map = { 
     'app': 'app', // 'dist', 
     'rxjs': 'node_modules/rxjs', 
     'angular2-in-memory-web-api': 'node_modules/angular2-in-memory-web-api', 
     '@angular': 'node_modules/@angular', 
     moment: 'node_modules/moment/moment.js' 
    }; 

一旦你拥有所有这些之后,就应该能够使用任何NG2-引导组件没有问题。

+0

如果我在脚本中有bootstrap src,生产代码期间index.html如何引用node_modules文件夹。我的假设是我们不在最终版本部署文件夹中包含node_modules。如果错误请纠正。或者我遇到了使用gulp实际上需要那些node_modules必需的文件并放入将在现场环境中使用的单独文件夹。 – erchristopher

0

systemjs。配置

(function(global) { 

     // map tells the System loader where to look for things 
     var map = { 
      'app':      'js/app', // 'dist', 
      'rxjs':      'js/vendor/rxjs', 
      '@angular':     'js/vendor/@angular', 
      'moment':      'js/vendor/moment/moment.js', 
      'ng2-bootstrap':    'js/vendor/ng2-bootstrap' 
     }; 

     // packages tells the System loader how to load when no filename and/or no extension 
     var packages = { 
      'app':      { main: 'boot.js', defaultExtension: 'js' }, 
      'rxjs':      { defaultExtension: 'js' }, 
      'ng2-bootstrap':    { defaultExtension: 'js' } 
     }; 

     var packageNames = [ 
      '@angular/common', 
      '@angular/compiler', 
      '@angular/core', 
      '@angular/http', 
      '@angular/platform-browser', 
      '@angular/platform-browser-dynamic', 
      '@angular/router', 
      '@angular/testing', 
      '@angular/upgrade' 
     ]; 

     // add package entries for angular packages in the form '@angular/common': { main: 'index.js', defaultExtension: 'js' } 
     packageNames.forEach(function(pkgName) { 
      packages[pkgName] = { main: 'index.js', defaultExtension: 'js' }; 
     }); 

     var config = { 
      map: map, 
      packages: packages 
    }; 
// filterSystemConfig - index.html's chance to modify config before we register it. 
     if (global.filterSystemConfig) { global.filterSystemConfig(config); } 

     System.config(config); 

    })(this); 

gulpfile

gulp.task('vendor', function() { 

    // Angular 2 Framework 
    gulp.src('node_modules/@angular/**') 
     .pipe(gulp.dest(vendor + '/@angular')); 

    //ES6 Shim 
    gulp.src('node_modules/es6-shim/**') 
     .pipe(gulp.dest(vendor + '/es6-shim/')); 

    //reflect metadata 
    gulp.src('node_modules/reflect-metadata/**') 
     .pipe(gulp.dest(vendor + '/reflect-metadata/')); 

    //rxjs 
    gulp.src('node_modules/rxjs/**') 
     .pipe(gulp.dest(vendor + '/rxjs/')); 

    //systemjs 
    gulp.src('node_modules/systemjs/**') 
     .pipe(gulp.dest(vendor + '/systemjs/')); 

    //bootstrap 
    gulp.src('node_modules/ng2-bootstrap/**') 
     .pipe(gulp.dest(vendor + '/ng2-bootstrap')); 

    //moment.js for bootstrap datepicker 
    gulp.src('node_modules/moment/**') 
      .pipe(gulp.dest(vendor + '/moment')); 

    //zonejs 
    return gulp.src('node_modules/zone.js/**') 
     .pipe(gulp.dest(vendor + '/zone.js/')); 
}); 
0

万一别人遇到更多的问题,并收到此错误:

Uncaught TypeError: System.registerDynamic is not a function. 

解决方案:移动你的NG2,引导脚本在index.html文件中的systemjs脚本标记后添加标记。这应该不重要,但现在它确实如此。

所以,如果你使用Angular2-quickstart,你的index.html应该是这样的。

<html> 
    <head> 
    <title>Angular 2 QuickStart</title> 
    <meta charset="UTF-8"> 
    <meta name="viewport" content="width=device-width, initial-scale=1"> 
    <link rel="stylesheet" href="styles.css"> 
    <!-- 1. Load libraries --> 
    <!-- Polyfill(s) for older browsers --> 
    <script src="node_modules/core-js/client/shim.min.js"></script> 
    <script src="node_modules/zone.js/dist/zone.js"></script> 
    <script src="node_modules/reflect-metadata/Reflect.js"></script> 
    <script src="node_modules/systemjs/dist/system.src.js"></script> 
    <script src="node_modules/ng2-bootstrap/bundles/ng2-bootstrap.min.js"></script> 
    <!-- 2. Configure SystemJS --> 
    <script src="systemjs.config.js"></script> 
    <script> 
     System.import('app').catch(function(err){ console.error(err); }); 
    </script> 
    </head> 
    <!-- 3. Display the application --> 
    <body> 
    <app>Loading...</app> 
    </body> 
</html> 
相关问题