2016-12-15 74 views
0

我使用Ionic2目前正在开发移动应用程序,我遇到了一个问题。基本上,我想实现的是划分我的应用程序中,我可以创建全局模块(或通用模块[可通过任何应用程式使用])是为应用程序特定模块完全独立的方式。全球Ionic2/Angular2模块

我我的结构这样的代码:

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. 

因此,基本上,在这种结构中,我可以只创建全局有用的模块,只是把它的任何地方。

但我面临着这样的错误:

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

我个人而言,如果处理得当模块的进口,我看不出有任何错误。 现在,我的问题是:

  1. 对于ionic2/angular2应用程序,上述结构是可行/可行的吗?
  2. 鉴于我在下面做了进口,在那里我能在哪里呢?

感谢您的答复。

相关的代码:

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 { 
} 

globals/modules/user/module.ts

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){ 
    } 
} 

回答

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

这是快。小心添加上下文?因为这是工作,如果我删除对Auth的UserController依赖。我的意思是,如果我删除UserController依赖项,我仍然可以在应用程序的其他部分使用Auth。 感谢您的快速响应! :) – Jan

+0

我不属于IONIC,所以没有提到我的解释。但是在通用中,模块可以导出和导入。这里有一个GlobalModule,它应该在AppModule中导入。在Angular2上下文中,'Providers'数组提供''服务'依赖关系,并且您将模块作为依赖项传递,这没有任何意义。如果你从'Auth'中删除'UserController',它应该可以工作,因为你已经在GlobalModule中声明了它,或者它变成了独立的实体。不确定它是如何工作的,如果你从'Auth'中移除它并在'providers'数组中传递'GlobalModule'。 – micronyks

+0

现在很明显。非常感谢你! – Jan