반응형

@Output - angular/core (컴포넌트 이벤트 바인딩)


-EventEmitter를 이용하여, emit을 실행함. 주의, 제네릭에 클래스를 넣어 진행.


Tip: @Output('customName') 을 사용하면, 외부로 노출되는 @Output() 변수명 : {}의 변수명을 노출하지 않음.


작동 원리 :

0. ts의 EventEmitter 및 onComponentEevet가 선언.

1. component.hmtl의 click이벤트 발생.

2. eventDirective에 EventEmitter가 주입되어 있으므로, eventDirective.emit을 통하여 event를 날림.

3. parent.html의 onParentEvent()로 연결된 이벤트를 실행함.




parent.component.ts

eventElements = [{type: 'customEvent', name: 'Testevent', content: 'Just a test!'}];

onEventAdded(eventData: {eventName: string, eventContent: string}) {
this.eventElements.push({
type: 'customEvent',
name: eventData.eventName,
content: eventData.eventContent
});
}


parent.component.html

<div class="container">
<app-cockpit (eventCreated)="onEventAdded($event)">
</app-cockpit>
</div>


cockpit.component.ts

@Output() eventCreated = new EventEmitter<{eventName: string, eventContent: string}>();
newEventName = '';
newEventContent = '';

onAddEvent() {
this.eventCreated.emit({
eventName: this.newEventName,
eventContent: this.newEventContent
});
}


cockpit.component.html

<div class="row">
<div class="col-xs-12">
<label>Event Name</label>
<input type="text" class="form-control" [(ngModel)]="newEventName">
<label>Event Content</label>
<input type="text" class="form-control" [(ngModel)]="newEventContent">
<br>
<button
class="btn btn-primary"
(click)="onAddEvent()">Add Event</button>
</div>
</div>



반응형

'프로그래밍 > Angular' 카테고리의 다른 글

style 스타일링  (0) 2018.09.05
FormsModule With ViewChild  (0) 2018.09.05
Input decoretor  (0) 2018.08.12
Component- DataBinding  (0) 2018.08.11
Pipe  (0) 2018.06.07

+ Recent posts