2016-06-08 18 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'); 
     } 
}