2016-06-08 20 views
1

我有app.component.ts这样的:依赖注入构造器参数:在`RouteConfig`初始误差分量

import { RouteConfig, Router } from '@angular/router-deprecated'; 
@RouteConfig([ 
    { 
    path: '/meter', name: 'Meter', component: Meter 
    } 
]) 

app.tpl.html这样的:

<main> 
    <router-outlet></router-outlet> 
</main> 

Meter成分是这样的:

import { Device } from './device.model'; 

@Component({ 
    selector: 'meter', 
    providers: [Device], 
    template: require('./meter.tpl.html') 
}) 
export class Meter { 
    constructor(
    public devices: Device 
) { 

    } 
} 

Device模式是这样的:

import { Injectable } from '@angular/core'; 

@Injectable() 
export class Device {  
    constructor(
    public deviceSerialNr: string 
) { 
     console.log('Device created'); 
    } 
} 

当我运行应用程序,我得到的错误:

EXCEPTION: Error: Uncaught (in promise): EXCEPTION: Error in :0:0 
ORIGINAL EXCEPTION: No provider for String! 
ORIGINAL STACKTRACE: 
Error: DI Exception 

但是,如果我从constructor参数类根移动属性public xx: XXX,这将是确定。

--------------- UPDATE --------------

我不应该注入设备类作为一个参数角度组件构造函数。只需从Device类中删除@Injectable并从Meter的构造函数中删除公共设备decalre。

回答

1

问题是在这里,

@Injectable() 
export class Device {  
    constructor(
    public deviceSerialNr: string <------problem area 
) { 
     console.log('Device created'); 
    } 
} 

,而不是你应该写,

@Injectable() 
    export class Device { 
    public deviceSerialNr: string; <------look here 
     constructor() { 
      console.log('Device created'); 
     } 
    } 

OR

@Injectable() 
    export class Device {  
     constructor() { 
      this.deviceSerialNr="someValue";  <------look here 
      console.log('Device created'); 
     } 
}