2017-05-07 49 views
-1

我已经在Angular 2中构建了一个基本应用程序,并且无法通过模块将服务注入到其中一个组件中。Angular 2 DI - 无法解析所有参数

用的WebPack编译后,我得到这个以下错误: “角2 DI - 无法解析所有的参数”

// UserModule 
import {NgModule} from '@angular/core'; 
import {CommonModule} from '@angular/common'; 
import {UserService} from "../services/user.service"; 
import {UserComponent} from "./user.component"; 

@NgModule({ 
    imports: [ 
     CommonModule 
    ], 
    declarations: [ 
     UserComponent 
    ], 
    exports: [UserComponent], 
    providers: [UserService] 
}) 
export class UserModule {} 
// UserComponent 
import {Component, Inject} from '@angular/core'; 
import {UserService, IUser} from "../services/user.service"; 
import {FormGroup, ReactiveFormsModule} from "@angular/forms"; 

@Component({ 
    templateUrl: './user.component.html', 
    styleUrls: ['./user.component.css'] 
}) 

export class UserComponent { 
    user: IUser[] = []; 

    // constructor(private userService: UserService) { 
    // does not work too 
    constructor(@Inject(UserService) private userService: UserService) { 
     this.user = this.userService.get({id: 1}); 
    } 
} 
// UserService 
import {Injectable} from '@angular/core'; 
import {RequestMethod} from '@angular/http'; 

import {ResourceMethod} from 'ngx-resource/src/Interfaces'; 
import {ResourceAction, ResourceParams} from 'ng2-resource-rest'; 
import {RestClient} from '../shared/rest-client'; 

interface IQueryInput { 
    id: number; 
} 

export interface IUser { 
    id: number; 
    name: string; 
    description: string; 
    user_content: IUserContent[]; 
} 

export interface IUserContent { 
    url: string; 
    type: string; 
    title: string; 
} 

@Injectable() 
@ResourceParams({ 
    url: 'users' 
}) 
export class UserService extends RestClient { 
    @ResourceAction({ 
     path: '/', 
     isArray: true 
    }) 
    query: ResourceMethod<IQueryInput, IUser[]>; 

    @ResourceAction({ 
     path: '/{!id}' 
    }) 
    get: ResourceMethod<{id: any}, IUser[]>; 
} 

也就是说从浏览器控制台:

Uncaught Error: Can't resolve all parameters for UserService: (?, ?). 
    at syntaxError (http://127.0.0.1:8000/vendor.bundle.js:41458:34) [<root>] 
    at CompileMetadataResolver._getDependenciesMetadata (http://127.0.0.1:8000/vendor.bundle.js:54735:35) [<root>] 
    at CompileMetadataResolver._getTypeMetadata (http://127.0.0.1:8000/vendor.bundle.js:54603:26) [<root>] 
    at CompileMetadataResolver._getInjectableMetadata (http://127.0.0.1:8000/vendor.bundle.js:54589:21) [<root>] 
    at CompileMetadataResolver.getProviderMetadata (http://127.0.0.1:8000/vendor.bundle.js:54878:40) [<root>] 
    at http://127.0.0.1:8000/vendor.bundle.js:54808:49 [<root>] 
    at Array.forEach (native) [<root>] 
    at CompileMetadataResolver._getProvidersMetadata (http://127.0.0.1:8000/vendor.bundle.js:54769:19) [<root>] 
    at CompileMetadataResolver.getNgModuleMetadata (http://127.0.0.1:8000/vendor.bundle.js:54424:50) [<root>] 
    at CompileMetadataResolver.getNgModuleSummary (http://127.0.0.1:8000/vendor.bundle.js:54277:52) [<root>] 
    at http://127.0.0.1:8000/vendor.bundle.js:54350:72 [<root>] 
    at Array.forEach (native) [<root>] 
    at CompileMetadataResolver.getNgModuleMetadata (http://127.0.0.1:8000/vendor.bundle.js:54335:49) [<root>] 
    at JitCompiler._loadModules (http://127.0.0.1:8000/vendor.bundle.js:65516:64) [<root>] 
+1

为什么(@注入(CampaignService会)私人userService:UserService就可以直接使用该服务对于信息使用服务检查本回购(@注入(CampaignService会)private userService:UserService –

+1

你没有在你的ts中有一个'UserService'类 – echonax

+0

我试图直接使用它,但我得到了同样的错误 – user2588688

回答

0

我想你需要添加ResourceModule.forRoot( )到您的进口。

如果您使用的是Typescript,则应删除@Inject()。

IMO,你的问题更像是如何正确使用ngx资源。

你可能会想试试他们的榜样第一

https://github.com/troyanskiy/ngx-resource

相关问题