我使用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;
}
我没有使用桶导入,因为您可以看到,因为导入的顺序可能会导致相同的错误。
我对如何解决这个问题有点困惑...谢谢
答案 0 :(得分:2)
如果该课程仅用作模型,则不要将其添加到@NgModule.providers
并且不要尝试注入它。只需将类导入到您需要它的类文件中,就像使用任何其他普通类一样使用它
import { Member } from './member.model';
@Component({})
class MyComponent {
member = new Member();
}
另见:
答案 1 :(得分:2)
具有@Injectable()
装饰器的类由Angular实例化为服务提供者一次。 Angular使用反射/类型提示为实例提供依赖项。
Angular不知道给你的Member
类的构造函数提供什么,因为它的类型被定义为any
。