2016-12-15 5 views
0

Ich entwickle gerade eine mobile App mit Ionic2 und ich lief auf ein Problem. Grundsätzlich möchte ich meine App so unterteilen, dass ich globale Module (oder generische Module [kann von jeder App verwendet werden]) erstellen kann, die für die appspezifischen Module völlig getrennt sind.Globale Ionic2/Angular2 Module

ich strukturiert mein Code wie folgt aus:

src 
-> app 
-> assets 
-> configs 
-> globals [ this is where i put the global modules ] 
--> modules 
---> user 
----> user-controller.ts 
----> module.ts 
--> services 
... etc. 
--> module.ts (this bootstraps everything, included later on) 
-> pages 
.. etc. 

Also im Grunde in dieser Struktur kann ich nützliche Module schaffen nur global und es nur in jedem Ort ziehen.

Aber ich bin vor diesem Fehler:

inline template:164:9 caused by: No provider for UserController! 

Wie ich bin besorgt, wenn sie richtig die Einfuhr von Modulen durchgeführt, soll ich keinen Fehler sehen. Nun, meine Fragen sind:

  1. Ist die obige Struktur möglich/möglich für eine ionic2/angular2 App?
  2. Angesichts der Importe, die ich unten getan habe, wo könnte ich falsch gelaufen sein?

Danke für die Antworten.

Relevante Code:

globals/providers/auth.ts

import { Injectable} from "@angular/core"; 
import { UserController } from '../modules/user/user-controller'; 


@Injectable() 
export class Auth { 
    constructor(private userCtrl:UserController) { 

    } 
} 

app/app.module.ts

import { NgModule } from '@angular/core'; 


/** 
* Globals 
*/ 
import { GlobalModule } from '../globals/module'; 

@NgModule({ 
    declarations: [ 
    ], 
    imports: [ 
    ], 
    bootstrap: [IonicApp], 
    entryComponents: [ 
    ], 
    providers: [ 
     GlobalModule, 
    ] 
}) 
export class AppModule { 
} 

globals/module.ts

import {NgModule} from '@angular/core'; 

import { UserModule } from './modules/user/module'; 

@NgModule({ 
    /* import sub modules */ 
    imports: [ 
     UserModule 
    ], 

    /* import components */ 
    declarations: [], 
    exports: [], 

    /* import services */ 
    providers: [ 
     Auth 
    ] 
}) 
export class GlobalModule { 
} 
import {NgModule} from '@angular/core'; 

/* Import sub modules */ 

import { UserController } from './user-controller'; 

/* Import services */ 

@NgModule({ 
    /* import sub modules */ 
    imports: [ 
    ], 

    /* import components */ 
    declarations: [ 
    ], 

    exports: [ 
    ], 

    /* import services */ 
    providers: [ 
     UserController 
    ] 
}) 
export class UserModule { 
} 

globals/modules/user/user-controller.ts

import {Injectable} from "@angular/core"; 

@Injectable() 
export class UserController { 
    public users = []; 

    constructor() { 
    } 

    createUser(user){ 
    } 

    removeUser(user){ 
    } 
} 

Antwort

0
@NgModule({ 
    declarations: [ 
    ], 
    imports: [ 
     GlobalModule    //<--- you need to import it here 
    ], 
    bootstrap: [IonicApp], 
    entryComponents: [ 
    ], 
    providers: [ 
     // GlobalModule,   //<<<--- not needed here 
    ] 
}) 
export class AppModule { 
} 
+0

Das war schnell. Möchten Sie einen Kontext hinzufügen? Weil das funktioniert, wenn ich die UserController-Abhängigkeit von Auth entferne. Ich meine, ich kann immer noch Auth in anderen Teilen der App verwenden, wenn ich die UserController-Abhängigkeit entferne. Danke für die schnelle Antwort! :) – Jan

+0

Ich gehöre nicht zu IONIC also habe ich meine Erklärung nicht erwähnt. In generischen Modulen können Module exportiert und importiert werden. Hier haben Sie ein GlobalModule, das in AppModule importiert werden soll. Im Angular2-Kontext gibt es das Array Providers, das Service-Abhängigkeiten bereitstellt und das Modul als eine Abhängigkeit weitergibt, die keinen Sinn ergibt. Wenn Sie 'UserController' von' Auth' entfernen, sollte es so funktionieren, weil Sie es bereits in GlobalModule deklariert haben oder es zu einer unabhängigen Instanz wird. nicht sicher, wie es funktioniert, wenn Sie es aus 'Auth' entfernen und' GlobalModule' im 'providers' Array übergeben. – micronyks

+0

Jetzt ist es klar. Vielen Dank! – Jan