2017-11-27 15 views
1

AppComponentで試し子ボタンを使用して内部でレンダリングされるホームコンポーネント関数callFromParent()にアクセスしようとしています。私はエラーとして "ERROR TypeError:未定義の 'callFromParent'プロパティを読み取ることができません"角2アクセスルータ - アウトレットコンポーネント親の機能

私は同様の質問を試みたが、何も私のために働いた。助けてください。

Error

// App Component 
 

 
@ViewChild(HomeComponent) homeComponent: HomeComponent; 
 

 
    callChild() { 
 
    this.homeComponent.callFromParent(); 
 
    } 
 
    
 
    
 
//Home Component 
 
    
 
callFromParent() { 
 
    alert('Hi'); 
 
    }
<!-- App Component --> 
 

 
<button (click)="callChild()">Try Child</button> 
 
<router-outlet> 
 
    <home-component></home-component> 
 
</router-outlet>

+0

あなたにも家庭用コンポーネントセレクタを指定しているとき、なぜあなたは、ルータ・コンセントを使用しています? – JayDeeEss

+0

私は自分の現在のプロジェクト構造を持っています。以前に働いていた誰かによって作成されたものです – Jay

+0

ルータのアウトレットを使用している場合、メソッドを呼び出す共有サービスを作成することができます子コンポーネント(ホームコンポーネント)https://angular.io/guide/component-interaction#parent-and-children-communicate-via-a-service – JayDeeEss

答えて

0

を次のように、それは両方の子タグを持ってしても意味がありません(代わりにViewChildを使用しての)interaction using local variableを使用することができますおよび同じコンポーネントのルータコンセントに接続します。しかしrouter-outletの背後にあるコンポーネントがContentChildで行うことができます達する。

app.component:

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

selector: ... 
templateUrl: ... 
providers: [ HomeComponent ] 

// ... 

@ContentChild(HomeComponent) 
private homeComponent : HomeComponent; 

callChild() { 
    this.homeComponent.callFromParent(); 
} 
+0

私はcontentchildの詳細を取得できますか?このような多くのトピックへの参照。 – Jay

+0

グーグルではいくつかの話題を見つけることができます。これは、ViewChildとContentChildの違いを明らかにします:) http://blog.mgechev.com/2016/01/23/angular2-viewchildren -contentchildren-difference-viewproviders / – Alex

0

あなたが言及した他のよう

<!-- App Component --> 

<button (click)="home.callFromParent()">Try Child</button> 
<home-component #home></home-component> 
+0

'home-component'はルータ経由でロードされると思いますそれに 'ローカルテンプレート変数 'を追加しますか? –

関連する問題