2017-11-21 5 views
0

Ich habe diese Themen Angular CLI generated app with Web Workers und https://github.com/kaikcreator/angular-cli-web-worker zum Ausführen meiner gesamten angular4-Anwendung in Web-Worker verwendet.Verwenden Sie Router in eckig2/4 im Webworker

Meine letzte Frage ist "Wie benutze eckigen Router mit angular4 Anwendung vollständig in Webworker läuft".

Mein Problem ist, wenn ich

import { Routes, RouterModule } from '@angular/router'; 
verwenden

in AppModule, habe ich diesen Fehler:

zone.js:690 Unhandled Promise rejection: No provider for PlatformLocation! ; Zone: <root> ; Task: Promise.then ; Value: Error: No provider for PlatformLocation! 
at injectionError (core.es5.js:1169) 
at noProviderError (core.es5.js:1207) 
at ReflectiveInjector_../node_modules/@angular/core/@angular/core.es5.js.ReflectiveInjector_._throwOrNull (core.es5.js:2649) 
at ReflectiveInjector_../node_modules/@angular/core/@angular/core.es5.js.ReflectiveInjector_._getByKeyDefault (core.es5.js:2688) 
at ReflectiveInjector_../node_modules/@angular/core/@angular/core.es5.js.ReflectiveInjector_._getByKey (core.es5.js:2620) 
at ReflectiveInjector_../node_modules/@angular/core/@angular/core.es5.js.ReflectiveInjector_.get (core.es5.js:2489) 
at resolveNgModuleDep (core.es5.js:9492) 
at _callFactory (core.es5.js:9558) 
at _createProviderInstance$1 (core.es5.js:9506) 
at initNgModule (core.es5.js:9456) Error: No provider for PlatformLocation! 
at injectionError (http://localhost:4200/webworker.bundle.js:35604:90) 
at noProviderError (http://localhost:4200/webworker.bundle.js:35642:12) 
at ReflectiveInjector_../node_modules/@angular/core/@angular/core.es5.js.ReflectiveInjector_._throwOrNull (http://localhost:4200/webworker.bundle.js:37084:19) 
at ReflectiveInjector_../node_modules/@angular/core/@angular/core.es5.js.ReflectiveInjector_._getByKeyDefault (http://localhost:4200/webworker.bundle.js:37123:25) 
at ReflectiveInjector_../node_modules/@angular/core/@angular/core.es5.js.ReflectiveInjector_._getByKey (http://localhost:4200/webworker.bundle.js:37055:25) 
at ReflectiveInjector_../node_modules/@angular/core/@angular/core.es5.js.ReflectiveInjector_.get (http://localhost:4200/webworker.bundle.js:36924:21) 
at resolveNgModuleDep (http://localhost:4200/webworker.bundle.js:43927:25) 
at _callFactory (http://localhost:4200/webworker.bundle.js:43993:28) 
at _createProviderInstance$1 (http://localhost:4200/webworker.bundle.js:43941:26) 
at initNgModule (http://localhost:4200/webworker.bundle.js:43891:28) 

Offizielle angular4 Webworker Dokumentation leider nicht vorhanden ....

Thx für die Hilfe!

EDIT:

main.ts:

import { enableProdMode } from '@angular/core'; 
import { bootstrapWorkerUi, WORKER_UI_LOCATION_PROVIDERS } from '@angular/platform-webworker'; 

import { environment } from './environments/environment'; 

if (environment.production) { 
    enableProdMode(); 
} 

bootstrapWorkerUi('../webworker.bundle.js', WORKER_UI_LOCATION_PROVIDERS); 

WORKER_UI_LOCATION_PROVIDERS ist hier nutzlos. Ich sah (irgendwo im Internet), das ist der gute Weg.

app.module.ts

import { WorkerAppModule } from '@angular/platform-webworker'; 
import { NgModule } from '@angular/core'; 

import { AppComponent } from './app.component'; 
import { AppRoutingModule } from './app-routing.module'; 
import { CoreModule } from './core/core.module'; 
import { APP_BASE_HREF } from '@angular/common'; 
import { environment } from '../environments/environment'; 

@NgModule({ 
    declarations: [ 
    AppComponent 
    ], 
    imports: [ 
    WorkerAppModule, 
    CoreModule.forRoot(), 
    AppRoutingModule, 
    ], 
    providers: [ 
    { provide: APP_BASE_HREF, useValue: environment.baseHref }, 
    ], 
    bootstrap: [AppComponent] 
}) 
export class AppModule { } 

meine app-routing.module.ts

import { NgModule } from '@angular/core'; 
import { Routes, RouterModule } from '@angular/router'; 

export const routes: Routes = [ 
    // { path: '', redirectTo: 'pages', pathMatch: 'full'}, 
    // { path: '', loadChildren: './main-layout/main-layout.module#MainLayoutModule' }, 
    { path: '**', redirectTo: '', pathMatch: 'full'}, 
]; 

@NgModule({ 
    imports: [RouterModule.forRoot(routes)], 
    exports: [RouterModule] 
}) 
export class AppRoutingModule {} 

Antwort

0

Vielleicht ist das Problem aufgrund fehlt NativeScriptRouterModule innerhalb der in main.ts Datei importiert.

Könnte auch platformBrowserDynamic

sein Hoffe, dass es (fügen Sie Ihre main.ts und app.module.ts Dateien spezifischere bitte sein) hilft

+0

Vielen Dank, um zu antworten. Ich verwende nicht "NativeScript". Ich verstehe "NativeScript" ist "nur" für dev eckige App auf dem Handy, nein? Dafür benutze ich Cordova (ohne Ionic habe ich keine Zeit mein Projekt darauf zu migrieren). Ich werde meine Frage zu früheren Dateien bearbeiten. – dochosa

0

hier arbeiten Beispiel mit Routing in Web-Arbeiter. Example Ich versuche es mit faul, es funktioniert gut

+0

Danke für Ihre Antwort. Ich habe eine andere Methode zur Optimierung meiner App (ChangeDetectorRef) mit detach() und detectChanges() verwendet. Ich werde deine Lösung später versuchen. – dochosa

Verwandte Themen