ng2-bootstrap在Angular 2中不起作用('alert'不是已知元素:)

时间:2016-11-03 13:41:22

标签: angular ng2-bootstrap

我已经通过以下方式在运行Angular 2.0.1的项目上安装了ng2-bootstrap:

npm install ng2-bootstrap --save

我设置了这样的项目:

    //systemjs.config.js
    (function (global) {
    System.config({
        paths: {
            // paths serve as alias
            'npm:': 'node_modules/'
        },
        // map tells the System loader where to look for things
        map: {
            'moment': 'node_modules/moment/moment.js',
            'ng2-bootstrap/ng2-bootstrap': 'node_modules/ng2-bootstrap/bundles/ng2-bootstrap.umd.js',
            // our app is within the app folder
            app: 'app',
            // angular bundles

// app.module.ts
import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { HttpModule } from '@angular/http';
import { Ng2BootstrapModule } from 'ng2-bootstrap/ng2-bootstrap';
import { AppComponent }  from './app.component';
import { ClientModule } from './client/client.module';

@NgModule({
    imports: [
       Ng2BootstrapModule

    ],
    declarations: [
       AppComponent
    ],
    schemas: [ CUSTOM_ELEMENTS_SCHEMA ],
    providers: [
        NotificationService,
        { provide: LocationStrategy, useClass: HashLocationStrategy }
    ],
    bootstrap: [AppComponent]
})
export class AppModule { }

// client.module.ts
import { Ng2BootstrapModule } from 'ng2-bootstrap';

@NgModule({
    imports: [
        Ng2BootstrapModule
    ],
    declarations: [

    ],
    providers: [

    ]
})
export class ClientModule { }

最后:

// client-info.component.ts
import { Component, OnInit, OnDestroy } from '@angular/core';
import { AlertComponent } from 'ng2-bootstrap/ng2-bootstrap';

@Component({
    selector: 'client-info',
    template: `
    <div >
        <alert type="success">hello</alert>
    </div>
    `,
    styleUrls: ['app/client/client.css']
})

export class ClientInfoComponent {
    constructor() {

    }

   ngOnInit(): void { }

   ngOnDestroy(): void {

    }
}

但在浏览网站时,我收到以下错误:

  

未处理的承诺拒绝:模板解析错误:   'alert'不是一个已知元素:   1.如果'alert'是Angular组件,请验证它是否是此&gt;模块的一部分。   2.如果'alert'是Web组件,则将“CUSTOM_ELEMENTS_SCHEMA”添加到此组件的&gt;'@ NgModule.schemas'以禁止显示此消息。 (“

     

[错误 - &gt;]你好

我显然在这里做错了但是什么?

2 个答案:

答案 0 :(得分:1)

你app.module.ts应该是这样的。它对我很有帮助。

// app.module.ts
import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { HttpModule } from '@angular/http';
import { Ng2BootstrapModule } from 'ng2-bootstrap/ng2-bootstrap';
import { ClientModule } from './client/client.module';
import { AlertModule } from 'ng2-bootstrap/components/alert';

@NgModule({
    imports: [
       Ng2BootstrapModule,
       AlertModule

    ],
    declarations: [
       AppComponent
    ],
    schemas: [ CUSTOM_ELEMENTS_SCHEMA ],
    providers: [
        NotificationService,
        { provide: LocationStrategy, useClass: HashLocationStrategy }
    ],
    bootstrap: [AppComponent]
})
export class AppModule { }

将client-info.component.ts更改为此

    // client-info.component.ts
    import { Component, OnInit, OnDestroy } from '@angular/core';
    import { AlertModule } from 'ng2-bootstrap/components/alert';


    @Component({
        selector: 'client-info',
        template: `
        <div >
            <alert type="success">hello</alert>
        </div>
        `,
        styleUrls: ['app/client/client.css']
    })

    export class ClientInfoComponent {
        constructor() {

        }

       ngOnInit(): void { }

       ngOnDestroy(): void {

        }

}

答案 1 :(得分:1)

dilvish.john的答案对我有用,除了在我的组件中我不得不放

import { AlertModule } from 'ng2-bootstrap/alert';

但我不明白背后的逻辑:为什么在app.module中,我们必须导入'ng2-bootstrap / ng-2bootstrap'并且在组件中我们必须导入'ng2-bootstrap / alert'?< / p>

1-是不是所有组件都可用的Ng2BootstrapModule,因为我们在app.module中导入了它?所以AlertModule应该没有明确指定

2-如果我们应该在组件中明确地执行它,我们不应该使用 import from 'Ng2BootstrapModule/alert'?

谢谢,