Angular 2错误:(SystemJS)无法解析Member的所有参数:(?)。(...)

时间:2016-11-01 16:58:53

标签: javascript angular

我使用this seed application来缩小不断弹出的错误(因此调试更容易......)

尝试将数据模型添加到共享模块(在我的浏览器控制台中)时,我一直收到此错误:

Error: (SystemJS) Can't resolve all parameters for Member: (?).(…)

问题Member Class

import * as _ from 'lodash';
import { Injectable } from '@angular/core';

@Injectable()
export class Member {

  private id: string;
  [key: string]: any;

  constructor(private data?: any) {
    if (data) {
      this.id = data.id;
      _.extend(this, data.attributes);
    }
  }

}

我的SharedModule(暂时没有在其他地方引用Member Class):

import { NgModule, ModuleWithProviders } from '@angular/core';
import { CommonModule } from '@angular/common';
import { FormsModule } from '@angular/forms';
import { RouterModule } from '@angular/router';

import { ToolbarComponent } from './toolbar/index';
import { NavbarComponent } from './navbar/index';
import { NameListService } from './name-list/index';

import { Member } from './models/member.model';

@NgModule({
  imports: [CommonModule, RouterModule],
  declarations: [ToolbarComponent, NavbarComponent],
  exports: [ToolbarComponent, NavbarComponent,
    CommonModule, FormsModule, RouterModule]
})
export class SharedModule {
  static forRoot(): ModuleWithProviders {
    return {
      ngModule: SharedModule,
      providers: [NameListService, Member]
    };
  }
}

当我摆脱class Member中的构造函数时,错误消失了:

import * as _ from 'lodash';
import { Injectable } from '@angular/core';

@Injectable()
export class Member {

  private id: string;
  [key: string]: any;

}

我没有使用桶导入,因为您可以看到,因为导入的顺序可能会导致相同的错误。

我对如何解决这个问题有点困惑...谢谢

2 个答案:

答案 0 :(得分:2)

如果该课程仅用作模型,则不要将其添加到@NgModule.providers并且不要尝试注入它。只需将类导入到您需要它的类文件中,就像使用任何其他普通类一样使用它

import { Member } from './member.model';

@Component({})
class MyComponent {
  member = new Member();
}

另见:

答案 1 :(得分:2)

具有@Injectable()装饰器的类由Angular实例化为服务提供者一次。 Angular使用反射/类型提示为实例提供依赖项。

Angular不知道给你的Member类的构造函数提供什么,因为它的类型被定义为any