El objeto de datos de servicio se actualiza en varios componentes y ahora cómo usar el último valor actualizado del objeto en el primer componente de inicio. En ese componente, cuando inicio el objeto en ngOnInit , no tiene el último valor.

Entonces, ¿cómo puedo activar el último cambio del objeto y ponerlo en el componente?

En servicio: title: string;

Y en primer componente: appTitle: string; ngOnInit() { this.appTitle = this.titleService.title; // <- here is first init and have default value; }

Y en segundo componente: appTitle: string; ngOnInit() { this.titleService.title = 'Login'; this.appTitle = this.titleService.title; // <- here is first init and have default value; }

Y en los archivos HTML de los componentes, utilizo {{ appTitle }} simple

Ahora me gusta que el primer componente appTitle sea 'Iniciar sesión' como la última actualización del objeto de servicio. Pero no puedo lograrlo de esta manera. No puedo obtener la última actualización de mi segundo componente en ngOnInit en el primer componente.

1
Zoran Panev 11 ago. 2017 a las 12:05

2 respuestas

La mejor respuesta

No estoy seguro de cuál es su problema, pero si hay algunos datos en su servicio que le gustaría compartir con otros componentes, puede hacer lo siguiente.

Angular 2/4 tiene un enlace de datos incorporado, lo que significa que si usa su servicio en sus componentes como público, puede manipular los objetos directamente y todos los demás componentes tendrán la versión actualizada.

P.ej. en tu componente

constructor(public myService:MyService){
 myService.sharedData = {someAttr:"Updated"}; // can also be used directly in your view.
}

Y a tu servicio:

public sharedData:any = {someAttr:"Hello"};
 constructor() {
}

Y en tu html:

<body>{{myService.sharedData}}</body> <!--Will display your shared data object-->
0
John 11 ago. 2017 a las 10:26

Puedes definir un captador:

get appTitle()
{
    return this.titleService.title
}

Ahora, cuando llama a this.appTitle, obtiene un título nuevo del servicio.

0
Mostafa Lavaei 11 ago. 2017 a las 09:46