2016-09-25 3 views
1

Angular2とTypescriptの新機能です。私はクラスのコンストラクタから@Inputへのアクセスを取得しようとしています。サービスはコンストラクタ内部から呼び出され、引数を渡す必要があります。Angular2アクセス@Inputクラスを使用して、サービスを呼び出すコンストラクタ

@Component({ 
    selector:'side-menu', 
    templateUrl:'menu.html', 
    providers: [MenuService] 
}) 

export class SideMenuComponent { 
    @Input() blockType; 

    menuItems 

    constructor(menuService:MenuService){ 
     this.menuItems = menuService.getMenuItems(this.blockType); // Sends Undefined 
     this.menuItems = menuService.getMenuItems('HardCodedString'); //This works 
    } 


} 

が、これは

@Injectable() 

export class MenuService { 
    getMenuItems(type) { 
     console.log(type) 

     switch(type){ 
      case 'Thing': 

       return []; 
       break; 
      case 'Otherthing': 
       return []; 
       break; 
      default: 
       return []; 


     } 

    } 
} 

どのように私は@Inputを確保することができ、私のサービスであるサービスに送信されますか?

+0

どのバージョンのAngular2を使用していますか? – micronyks

答えて

2

コンストラクタの呼び出し時に入力がまだ設定されていません。代わりにコンストラクタコードをngOnInit()に移動します。

@Component({ 
    selector:'side-menu', 
    templateUrl:'menu.html', 
    providers: [MenuService] 
}) 

export class SideMenuComponent { 
    @Input() blockType; 

    menuItems 

    constructor(private menuService:MenuService){} 

    ngOnInit() { 
     this.menuItems = this.menuService.getMenuItems(this.blockType); // Sends Undefined 
     this.menuItems = this.menuService.getMenuItems('HardCodedString'); //This works 
    } 
} 

たび@Input() sがngOnChanges()が呼び出され、更新されています。
ngOnInit()は、初めて呼び出されたngOnChanges()の後に呼び出されます。

+0

これを試してみてcore.umd.js:3464 ORIGINAL例外:menuServiceが定義されていません – Rob

+0

'MenuService'のような' MenuService'のようなものがありません(例えば、 'menu.service 'から' import {MenuService}') –

+0

@yurzuiは私の答えを編集し、あなたの質問からコピーした他のいくつかの問題を修正しました - ありがとう! –

関連する問題