无法解析UserService的所有参数:( Http ,?)

时间:2016-10-20 09:11:01

标签: angular

我的项目工作正常,直到我升级到最近的Angular2版本2.0.0-beta.17

我的UserService就像这样

import { Injectable} from '@angular/core';
import { Http } from '@angular/http';
import { BaseService } from './base.service';
import { SubDomain } from './../interfaces/subdomain.interface';
import { SubDomainService} from './index';

@Injectable()
export class UserService extends BaseService {
  subDomain: SubDomain;
  constructor(
    private _http: Http,
    private subDomainService: SubDomainService
  ) {
     super();
     this.subDomain = subDomainService.subDomain;
  } 
}

和SubDomainService就是这样的

import { Injectable } from '@angular/core';
import { SubDomain } from './../interfaces/subdomain.interface';
import { CompanyService } from './company.service';

@Injectable()
export class SubDomainService {
  subDomain: SubDomain = {
    exists: false,
    is_sub_domain_url: false,
    sub_domain: '',
    company_id: '',
    user_id: '',
    name:''
  };

  constructor(
    private _companyService: CompanyService
  ) {
  }
}

我查找了解决方案但其中大多数是关于使服务可注射但在这里我遵循相同的约定但仍然是它给出了错误

  

未捕获错误:无法解析UserService的所有参数:( Http,?)。

我的AppModule就像这样

import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { CoreModule } from './core.module';
import { AppComponent } from './app.component';
import { routes } from './config/routes/index';

@NgModule({
 declarations: [
   AppComponent
 ],
 imports: [
   routes,
   BrowserModule,
   CoreModule.forRoot()
 ],
 bootstrap: [AppComponent]
})
export class AppModule { }

CoreModule就像这样

import {ModuleWithProviders, NgModule, Optional, SkipSelf } from '@angular/core';
import { 
  SubDomainService, 
  CompanyService, 
  UserService
} from './shared/services/index';
import {SharedModule} from './shared/modules/shared.module';

@NgModule({
   exports: [SharedModule]
})

export class CoreModule {
   static forRoot(): ModuleWithProviders {
    return {
        ngModule: CoreModule,
        providers: [SubDomainService,UserService,CompanyService]
    };
   }

   constructor( @Optional() @SkipSelf() parentModule: CoreModule) {
       if (parentModule) {
           throw new Error('CoreModule is already loaded. Import it in the AppModule only');
       }
   }
}

2 个答案:

答案 0 :(得分:4)

这可能是由于此导入声明

import { SubDomainService} from './index';

您可能正在从另一个文件导出SubDomainService,例如您的index.ts,考虑直接从它自己的文件导入服务

答案 1 :(得分:1)

Devesh,

问题如下:

  • 您正在从index.ts文件导入,并且该文件中用于导出不同服务的语句的顺序是错误的,因为至少有一个依赖项放在具有它的其他服务之后。

解决方案:

  • 您可以在模块中导入其直接文件中的服务
  • 或者在services文件夹的index.ts文件中对export语句进行排序,使得具有依赖关系的那些语句总是在其依赖项的导出之后。

这很难跟踪,因为角度只是在控制台中抛出错误而没有详细说明。

您的案例共享/ services / index.ts的示例 export * from './sub-domain.service' export * from './user.service