動作:https://toparent.herokuapp.com/
ソース:https://github.com/kuniatsu/routerQuestion
親コンポーネントでrouter-outletを使用して表示する際の子コンポーネントとの値の受け渡し方法がわかりません。
<router-outlet (onVoted)="onVoted($event)"></router-outlet><!--不可--> <app-child1 (onVoted)="onVoted($event)"></app-child1><!--可-->
selectorを使用した場合は、@Outputで親コンポーネントのメソッドを渡すことによって親との値のやり取りができますが、他のコンポーネントも共通するrouter-outletの場合どのようにしたら良いでしょうか?
下記では、Routerで表示している子コンポーネントのボタンは動かず、selectorで表示しているボタンは動作し、タイトルに1を加えます。
親.ts
@Component({ selector: 'app-root', templateUrl: './app.component.html', styleUrls: ['./app.component.css'] }) export class AppComponent { title = 'app works!'; onVoted(num: number) { this.title = this.title + num; } }
親.html
<h1> {{title}} </h1> <a href=""></a> <a href="c1">child1</a> <a href="c2">child2</a> <a href="c3">child3</a> <router-outlet></router-outlet> <hr /> <app-child1 (onVoted)="onVoted($event)"></app-child1>
子.ts
@Component({ selector: 'app-child1', templateUrl: './child1.component.html', styleUrls: ['./child1.component.css'] }) export class Child1Component implements OnInit { constructor() { } ngOnInit() {} @Output() onVoted = new EventEmitter<number>(); changeTitle(){ this.onVoted.emit(1); } }
子.html
<p> child1 works! </p> <button (click)="changeTitle()">TitleSend</button>
子2.html
<p> child2 works! </p>
モジュール.ts
@NgModule({ declarations: [ AppComponent, Child1Component, Child2Component, Child3Component ], imports: [ BrowserModule, FormsModule, HttpModule, RouterModule.forRoot([ { path:'', component:Child1Component },{ path:'c1', component:Child1Component },{ path:'c2', component:Child2Component, },{ path:'c3', component:Child3Component, } ]) ], providers: [], bootstrap: [AppComponent] }) export class AppModule { }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。