Angular で複数コンポーネントを連携する
Angular でコンポーネントとコンポーネントを連携する方法です。
abcとdefというコンポーネントを作成して実際に連携させてみます。
コンポーネント間の連携ではclassを定義しておくことが重要になってきます。
detail.ts(クラス)
// name,ageプロパティを持つクラスを定義して連携する export class Detail { name: string; age: number; }
このクラスを使用します。
abc.compnent.ts
import { Component, OnInit } from '@angular/core'; import { Detail } from '../class/detail'; @Component({ selector: 'app-abc', template: ` <table border="1"> <tr *ngFor='let tmp of names'> <td>{{tmp.name}}</td> <td><button (click)='onDetailClick(tmp)' type='button'>ボタン</button></td> </tr> </table> <app-def [src]='detail'></app-def> <!-- app-defコンポーネントで定義する --> `, styleUrls: ['./abc.component.css'] }) export class AbcComponent implements OnInit { constructor() { } detail:Detail;// Detailクラス型の変数を宣言する names = [ {'name':'takahashi','age': 20,'sex': '男性'}, {'name':'maruyama','age': 30,'sex': '女性'} ]; ngOnInit() { } // ボタン押下時の処理 onDetailClick(tmp: Detail) { // 仮引数の型はDetailクラス this.detail = tmp; } }
以下の画面でボタンを押すと、onDetailClickメソッドが実行されます。
クリックすると、defコンポーネントのsrc属性にdetailが設定されます。
def.component.ts
import { Component, OnInit,Input } from '@angular/core'; import { Detail } from '../class/detail'; @Component({ selector: 'app-def', template: ` <ul *ngIf='src'> <li>名前:{{src.name}}</li> <li>年齢:{{src.age}}</li> <li>性別:{{src.sex}}</li> </ul> `, styleUrls: ['./def.component.css'] }) export class DefComponent implements OnInit { constructor() { } @Input() src:Detail; // Detail型のsrcという名前の属性 ngOnInit() { } }
ng serve
で起動すると、以下のようにクラスを介してコンポーネント間の連携が可能になります。動作は以下のようになります。
詳細は「AngularとTypeScriptでSPAを作成する」を参照ください。
KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^
コメント