Интеграция ng-bootstrap в проект ASP.NET Core JavaScript Services (Angular)

Я использую ASP.NET Core 2.0 JavaScript Services с Angular и пытаюсь интегрировать ng-bootstrap.

Я установил ng-bootstrap:

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

Я добавил это в webpack.config.vendor.js:

...
const treeShakableModules = [
    '@angular/animations',
    '@angular/common',
    '@angular/compiler',
    '@angular/core',
    '@angular/forms',
    '@angular/http',
    '@angular/platform-browser',
    '@angular/platform-browser-dynamic',
    '@angular/router',
    '@ng-bootstrap/ng-bootstrap',  // <-- down here
    'zone.js',
];
...

я добавил NgbModule к импорту моего app.module.shared.ts:

...
import { NgbModule } from '@ng-bootstrap/ng-bootstrap';
...
@NgModule({
    declarations: [
        AppComponent,
        ...
    ],
    imports: [
        CommonModule,
        NgbModule.forRoot(),  // <-- this guy
        HttpModule,
        FormsModule,
        RouterModule.forRoot([
            ...
        ])
    ]
})
export class AppModuleShared {
}

Я очищаю решение и запускаю:

c:\...>webpack && webpack --config webpack.config.vendor.js

Все хорошо строит.

Бег:

c:\...>dotnet run

Попытка загрузить страницу приводит к следующей ошибке:

NodeInvocationException: Превышение тайм-аута после 30000 мс, потому что функция загрузки в ClientApp / dist / main-server вернула обещание, которое не удалось разрешить или отклонить.

Это совершенно очевидно связано с предварительным рендерингом. Поэтому я сейчас пытаюсь создать макет ng-bootstrap используя только те компоненты, которые я хочу использовать, которые не будут вызывать никаких обещаний (или будут использовать фиктивные обещания, которые разрешаются немедленно) и не будут вызывать DOM. Это будет импортировано в app.module.server.ts...

import { NgbModule } from './components/ng-bootstrap-mockup/ng-bootstrap'

... и стандарт...

import { NgbModule } from '@ng-bootstrap/ng-bootstrap'

... будет использоваться в app.module.browser.ts вместо того, чтобы использовать стандарт в app.module.shared.ts,

Они оба, конечно, будут импортированы в свои app модули...

@NgModule({
    ...
    imports: [
        NgbModule.forRoot(),
        ...
    ]
})
...

Итак, мой вопрос, я что-то упустил? Есть ли лучший способ справиться с этим, кроме создания макета, подобного тому, который я описал выше?

1 ответ

Вы можете добавить Bootstrap 4 в проект Angular

Установите загрузочную версию Alpha, используя NPM:

npm install --save bootstrap@4.0.0-alpha.6
//We chose a specific version to ensure future releases doesn’t break the sample. Optionally, run the following command to install the latest pre-release package.

npm install –save bootstrap@next
//Once the package is downloaded, add Bootstrap references in .angular-cli.json.

//Modify styles configuration to add Bootstrap CSS

styles": [
    "../node_modules/bootstrap/dist/css/bootstrap.min.css",
    "styles.css"
],

//Modify scripts configuration to add jQuery, Bootstrap and Tether JS files.

"scripts": [
    "../node_modules/jquery/dist/jquery.min.js",
    "../node_modules/tether/dist/js/tether.min.js",        
    "../node_modules/bootstrap/dist/js/bootstrap.min.js"
],
Другие вопросы по тегам