Quiero lograr lo siguiente, quiero implementar 2 componentes, el primero que contenga una tabla y el segundo que contenga algunos campos de entrada, el truco es el siguiente:
Quiero que estos 2 componentes sean componentes secundarios para un componente principal. En el componente principal quiero tener algunos datos. Quiero que la tabla pueda escuchar los datos del cambio principal, para que se actualice en tiempo real, pero también quiero poder interactuar con los datos (seleccionar algunas casillas de verificación en la tabla modificará los datos en el componente principal) Y Quiero que el segundo componente secundario obtenga los datos del componente principal, rellene los campos de entrada con él y también pueda interactuar con los datos del componente principal modificando los datos en los campos de entrada.
Pensé en tener un tema de comportamiento en el componente principal, enviarlo como entrada a cada uno de los componentes secundarios, suscribirlo en ambos componentes secundarios y valores .next al tema de comportamiento desde cualquiera de los componentes.
¿Funcionaría esto? ¿O es una mejor manera de lograrlo? TL: DR Tengo 3 componentes, 2 componentes secundarios de un componente principal, quiero que puedan obtener actualizaciones en vivo de algunos datos modificados por cualquiera de los componentes y poder modificar los datos en cualquier momento.
No es necesario BehaviorSubject si solo lo necesita en los componentes principales y secundarios. Simplemente puede usar el enlace de datos bidireccional usando @Input & @Output . Ver esta respuesta anterior
Iptome tiene razón. Para la comunicación del componente contenedor-presentación, lo mejor es usar solo entradas. He aquí un ejemplo muy básico:
Script de componente de contenedor:
someData$ = of([1, 2, 3])Plantilla de componente de contenedor:
<app-child-one [data]="someData$ | async"></app-child-one> <app-child-two [data]="someData$ | async"></app-child-two>Guión del componente de presentación:
@Input() dataAquí está el ejemplo anterior en un Stackblitz .