2016-06-21 144 views
0

我刚刚开始使用Angular2。我已经阅读了Angular2网站上的所有导师,并开始着手我的项目并在之后被卡住了。Angular2,构造函数DI抛出异常

这是来源。

app.ts:

import { Component }   from '@angular/core'; 
import { bootstrap }   from '@angular/platform-browser-dynamic'; 
import { ApiClient }   from './services/api-client'; 

@Component({ 
    selector: 'app', 
    template: 'Hello', 
    providers: [ApiClient] 
}) 
export class AppComponent { constructor(private apiClient: ApiClient) { } } 

bootstrap(AppComponent); 

API-client.ts:

import { Injectable } from '@angular/core' 

@Injectable() 
export class ApiClient { 
    public login(username: string, password: string, rememberMe: boolean) : boolean { 
    if (username == 'testuser' && password == 'password') 
     return true; 
    else 
     return false; 
} 
} 

而这个简单的源代码给了我一个很奇怪的例外: EXCEPTION:错误:未捕获的(以诺) :TypeError:dep为空

如果我删除构造函数DI,则异常消失。

我一直在为它奋斗了过去4小时,并没有任何想法来解决它。另一个奇怪的是,异常消息是无用的。

谢谢。

UPDATE

通过构造DI我提到了这一点:

constructor(private apiClient: ApiClient) { } 

更新2

我与组件更换注射()({})和现在的作品完美。这是什么意思?破碎的本地Angular2资源或某种错误配置?

+0

我发布了一些解释,为什么这不起作用。我在你的问题中缺少的是你期望发生的事情。角度DI不能从空气中创建'密码','用户名'和'rememberMe' ;-)。你想要或希望他们来自哪里? –

+0

我已经删除了这个方法,但仍然得到这个异常 –

+0

什么方法? 。 。 –

回答

0

固定!!!

由于某种原因“node_modules \ es6-shim”丢失!

我不知道为什么Firefox没有通知我这件事。 在Chrome中启动了Web应用程序,并注意到有关缺少JS引用的警告。

执行“npm install es6-shim”,现在按预期工作!

0

尝试:

import { Component, Inject } from '@angular/core'; 

... 
    export class AppComponent { 

     constructor(@Inject(ApiClient) apiClient: ApiClient) { } 
    } 

可能是值得你展示你ApiClient类的构造函数,如果你有一个。

+0

如果这个'@Inject()'是必须的,那么在你的代码中可能有其他错误。如果传递给'@Inject()'的类型与参数本身的类型相同,'@Inject()'是多余的。 –

+0

注入帮助。谢谢。不过,我想这是有点解决方法,而不是正确的修复 –

+0

我用组件({})替换了Injectable(),现在它工作得很完美。这是什么意思?破碎的本地Angular2资源或某种错误配置? –

相关问题