0

I have some component with checkboxes. And I have another component with table. The components are not one inside another. When I uncheck checkbox I need to change classes to some table columns on table component. What is the best way to do it ?

Mikael
  • 1,209
  • 1
  • 16
  • 47

2 Answers2

1

In angular most of the communication happens in the following ways.

  1. PARENT -> CHILD , use Input EventEmitter.
  2. CHILD -> PARENT, use Output EventEmitter.
  3. If no immediate relation between components -> Use a Data Service, angular service which both the components are dependent on to publish and retrieve data.
  4. Also you can use the ViewChild, if your child component is housed inside the parent component.
saidutt
  • 289
  • 1
  • 7
0

From your comment, both the components are used in app.component.html. Then you can create an event emitter for the change event in the check-box component. And in the app.component.html, assign a template variable to table component and assign any of it's function directly as callback for checkbox component's emitted event. Try the following

checkbox.component.html

<input type="checkbox" id="1" (change)="change.emit($event)"> Checkbox

checkbox.component.ts

@Output change = new EventEmitter();

app.component.html

<app-checkbox (change)="table1.checkboxChange($event)"></app-checkbox>
<app-table #table1></app-table>

table.component.ts

checkboxChange(event: any) {
  // change CSS selector of element
}

One advantage of this method is the parent component remains untouched and so an additional rerouting is avoided.

ruth
  • 29,535
  • 4
  • 30
  • 57