LoginSignup
0
1

More than 5 years have passed since last update.

Angular tips(4)

Last updated at Posted at 2017-10-14

Angular 復習(Angular4~)

@Input@Output

1. @Input

@Inputは、親コンポーネントが、子コンポーネントにデータを渡すための
デコレータである。

子コンポーネントのクラスに@Inputデコレータを付けた変数を用意し、親コンポーネントHTMLの子コンポーネントセレクタの[変数名]に値を代入する。
これにより、item変数に値が入り、子コンポーネントの画面に反映することができる。

子コンポーネントクラス

@Component(
    selector: 'stock-order',
    templete: `<ul><li>{{item.price}}</li><li>{{item.qty}}</li></ul>`,
)
export class ItemComponent{
    @Input item: Order;
}

親コンポーネントhtml

<stock-order [item]="selected"></stock-order>

2. @Output

@Outputは、@Inputとは逆に子コンポーネントから親コンポーネントにデータを渡すためのデコレータである。
子コンポーネントに、EventEmiter<?>オブジェクトを生成し、emit()メソッドをコールすることで、親コンポーネントに通知する。
親コンポーネントでは、子コンポーネントセレクタでイベントバインディング構文を(定義した子コンポーネント@Output変数)="親コンポーネントfunc($event)"という形で追加、親コンポーネントfunc($event)内で親コンポーネントの画面に反映をする。つまり、親コンポーネントにイベントとして通知される。

子コンポーネント

@Component(
    selector: 'stock-order',
    templete: `<ul><li>{{item.price}}</li><li>{{item.qty}}</li></ul>`,
)
export class ItemComponent{
    @Input  item : Order;
    @Output editedItem: EventEmiter<Order>;

    submit(){
        this.editedItem.emit(this.item);
    }
}

親コンポーネント

@Component(
    selector: 'order',
    templete: `<h1>{{price}}</h1><stock-order ></stock-order>`,
)
export class OrderComponent{
    price: int;
    onEdited(item: Order){
        price = item.price;
    }
}
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1