Angular 2 - 无法解析组件的所有参数:(?)

Posted

技术标签:

【中文标题】Angular 2 - 无法解析组件的所有参数:(?)【英文标题】:Angular 2 - Can't resolve all parameters for component: (?) 【发布时间】:2017-04-24 01:14:59 【问题描述】:

我启动了一个 Angular2 应用程序,但几天以来我一直遇到问题!

Can't resolve all parameters for HomeComponent: (?).(…) 

但我的问题不在于特定的提供者:我尝试在 HomeComponent 构造函数中注入的所有内容都会返回该错误。没有关于该错误的类似问题解决了我的情况,现在我花了很多时间寻找这个我找不到它。

App.moodule.ts:

  import  NgModule       from '@angular/core';
  import  BrowserModule  from '@angular/platform-browser';
  import  RouterModule    from '@angular/router';
  import  SimpleNotificationsModule  from 'angular2-notifications';

  // Controllers
  import  AppComponent   from './app.component';
  import  HomeComponent   from './components/home.component';

  // Service
  import  AuthService  from './services/auth.service';

  // Guards
  import  AuthGuard  from './guards/auth.guard';

  @NgModule(
    imports: [ 
        BrowserModule,
        RouterModule.forRoot([
        
          path: '',
          component: HomeComponent,
          canActivate: [AuthGuard]
        
      ]),
      SimpleNotificationsModule
    ],
    declarations: [ 
        AppComponent,
        HomeComponent
    ],
    providers: [
        AuthGuard,
      AuthService,
    ],
    bootstrap: [ AppComponent ]
  )

  export class AppModule  

我的主页组件:

import  Component, OnInit  from '@angular/core';
import  Router  from '@angular/router';

import  NotificationsService  from 'angular2-notifications';

import  AuthService  from '../services/auth.service';

@Component(
    selector: 'home',
    templateUrl: '/templates/home.html'
)

export class HomeComponent implements OnInit 

    public test: boolean = false;

    constructor( 
        private _authService: AuthService
    ) 

    ngOnInit()
    
        this.test = true;
    

我尝试导入的 AuthService 是空的,正如我所说,我在 HomeComponent 中注入的每个提供程序都会返回该错误。每个构造函数参数都会在错误中创建一个新问号。如果您需要更多代码,请告诉我,但我认为其余的(模板、systemjs.config.js ...)不是问题

【问题讨论】:

我怀疑导入或项目配置有问题,而不是代码。 通过这个但它可能是什么?你想要一个特定的文件吗? Ps : 当我没有在构造函数中添加任何参数时,它工作正常。 抱歉,不知道。我自己没用过TS,不了解项目配置。 这是指向正确的文件吗? import AuthService from '../services/auth.service'; @Hareesh 是的,我的 HomeController 所在的控制器目录与“服务”目录位于同一文件夹中。 【参考方案1】:

确保你有

"emitDecoratorMetadata": true,

在您的tsconfig.js 中。如果已启用,则无需将 @Inject() 添加到函数参数中。

【讨论】:

我在使用 Angular 5 开发 SharePoint SPFx 解决方案时遇到了这个问题。这节省了我的时间。谢谢 真正的救星!【参考方案2】:

导入这个

import Inject from '@angular/core';

并将你的构造函数更改为

constructor(@Inject(AuthService) _authService: AuthService) 



您应该在使用之前将任何服务@Inject 到构造函数中。

你的服务应该是可注入的

@Injectable()
export class AuthService 


【讨论】:

我在使用一个我没有创建的抽象类时弹出了这个模糊的错误消息@Injectable。添加@Injectable 为我修复了它。【参考方案3】:

我的问题最终没有了。我只是重新启动了 webpack watcher,然后一切都很好。作为参考,我使用的是 Angular CLI。

【讨论】:

不知道为什么,但事实证明这也是我的问题......首先让我有点冷汗,因为我就像“那应该可以工作.. wtf..”【参考方案4】:

对我来说引发此错误的问题完全不同。我在服务中错误地使用了组件中的日志记录类别,因此服务依赖于组件,无法及时创建以将其注入组件。

TL;DR:检查无法注入的服务上的导入。

【讨论】:

以上是关于Angular 2 - 无法解析组件的所有参数:(?)的主要内容,如果未能解决你的问题,请参考以下文章

单元测试时,Angular RC 5 中无法解析路由器的所有参数:(?, ?, ?, ?, ?, ?, ?)

尝试将服务注入角度组件时出错“例外:无法解析组件的所有参数”,为啥?

Angular 2 TypeScript 错误:无法解析 ProductsService 的所有参数

无法解析 AuthService 的所有参数:([object Object], ?) Angular 5.x

为啥“(SystemJS)无法解析所有参数”发生在Angular2中

Angular + Jest:无法解析 AppComponent 的所有参数:(?)