11

Używam ASP.NET Core 2.0's JavaScript Services z Angular i próbuję zintegrować ng-bootstrap.Łączenie programu Ng-bootstrap z projektem ASP.NET Core JavaScript Services (Angular)

zainstalowałem ng-bootstrap:

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

dodałem go do 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', 
]; 
... 

dodałem NgbModule przywozowi z moich 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 { 
} 

czyścić rozwiązanie i uruchom:

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

Wszystko w porządku.

Bieg:

c:\...>dotnet run

próby załadowania strony powoduje następujący błąd:

NodeInvocationException: Prerendering timed out after 30000ms because the boot function in 'ClientApp/dist/main-server' returned a promise that did not resolve or reject.

To dość oczywisty sposób związane z wstępnym renderowaniu. Dlatego obecnie próbuję utworzyć makietę o rozmiarze ng-bootstrap, używając tylko tych komponentów, które chcę użyć, które nie będą wywoływać żadnych obietnic (lub będą używać fałszywych obietnic, które zostaną rozwiązane od razu) i nie wywołują DOM. To będzie importowany w app.module.server.ts ...

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

... i średnia ...

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

... zostaną wykorzystane w app.module.browser.ts, zamiast korzystania średnia w app.module.shared.ts.

Będą oczywiście być importowane zarówno w swoich modułach app ...

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

Więc moje pytanie jest, ja czegoś brakuje? Czy istnieje lepszy sposób na poradzenie sobie z tym innym niż stworzenie makiety takiej jak ta opisana powyżej?

+0

Domyślam się, że skoro nie korzystał z żadnych elementów NG-bootstrap treeshaking jest upuszczenie go i rendering po stronie serwera zawiedzie. Spróbuj dodać coś i zobacz, czy błąd się zmieni. – Yaser

+0

@ Yaser Używam karuzeli. NgbModule pojawia się w 'ClientApp/dist/vendor.js'. –

+1

Myślę, że jeśli użyjesz go do udostępniania funkcji, nie musisz jej używać z 'NgbModule.forRoot()', po prostu 'NgbModule', a następnie w każdej aplikacji masz zamiar dodać to tak:' NgbModule .forRoot() ' –

Odpowiedz

1

Możesz dodać Bootstrap 4 do Kątowymi projektu

Install bootstrap Alpha release using NPM:

npm install --save [email protected] 
//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 [email protected] 
//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" 
],