Refresh view from angular sidebar

0

I included in the menu sidebar a select that allows to change the property, this corresponds to a component.

On the other hand I have another component that shows the data of this property, I have a global variable that stores this data.

The problem is that once I'm in the data view if I change the selected property the property data is not updated, I tried to trigger the update from the service but I have not been successful.

There is probably a correct way to generate this and I hope someone can explain it to me.

//SERVICIO

import { Injectable } from '@angular/core';
import { Http, Response, Headers, RequestOptions } from '@angular/http';
import { map } from 'rxjs/operators';
import { Observable } from 'rxjs/Observable';
import { GLOBAL } from './global';
import { Propiedad } from '../models/propiedad';
import { Plan } from '../models/plan';
import { Router } from '@angular/router';
import { Subject } from 'rxjs/Subject';


@Injectable()
export class PropiedadService {

  // pruebas
  private propiedadPrueba = new Subject<void>();
  public propiedadCambio$ = this.propiedadPrueba.asObservable();
  
  constructor(
    private _http: Http,
    private router: Router
  ) {
    this.url = GLOBAL.url;
  }
  
   getPropiedad(){
    return GLOBAL.propiedad;
  }

  setPropiedad(token, id: String) {
    this.buscarPropiedad(token, id).subscribe(
      response => {
        if (!response) {
          console.log('error al recuperar propiedad');
        } else {
          GLOBAL.propiedad = response;
          this.propiedadPrueba.next();
          this.router.navigate(['/karulover/propiedad']);
        }
      },
      error => {
        console.log(error);
      }
    )
  }

// componente Vista

import { Component, OnInit } from '@angular/core';
import { PropiedadService } from '../../services/propiedad.service';
import { LoginService } from '../../services/login.service';
import { Propiedad } from 'app/models/propiedad';

@Component({
  selector: 'app-propiedad-cliente',
  templateUrl: './propiedad-cliente.component.html',
  styleUrls: ['./propiedad-cliente.component.scss'],
  providers: [LoginService, PropiedadService]
})
export class PropiedadClienteComponent implements OnInit {
  token: any;
  identidad: any;
  propiedad: any;

  constructor(
    private _propiedadService: PropiedadService,
    private _loginService: LoginService
  ) { }

  ngOnInit() {
    this.token = this._loginService.getToken();
    this.identidad = this._loginService.getIdentidad();
    this.actualizarPropiedad();
    console.log(this.propiedad);

    this._propiedadService.propiedadCambio$.subscribe(() => {
      this.actualizarPropiedad();
    })
  }

  actualizarPropiedad() {
    this.propiedad = this._propiedadService.getPropiedad();
  }

}

// Componente sidebar

import { Component, OnInit } from '@angular/core';
import { Router } from '@angular/router';
import { LoginService } from '../../services/login.service';
import { PropiedadService } from '../../services/propiedad.service';
import {MatOption} from '@angular/material';

declare const $: any;
declare interface RouteInfo {
  path: string;
  title: string;
  icon: string;
  class: string;
  rol: string;
}

@Component({
  selector: 'app-sidebar',
  templateUrl: './sidebar.component.html',
  styleUrls: ['./sidebar.component.css'],
  providers: [LoginService, PropiedadService]
})
export class SidebarComponent implements OnInit {
  menuItems: any[] = new Array();
  menuItems_temp: any[];
  roles: any[];
  identidad: any;
  token: any;
  propiedades: any;

  constructor(private router: Router, private _loginService: LoginService, private _propiedadService: PropiedadService ) {
    this.identidad = this._loginService.getIdentidad();
  }

  ngOnInit() {
    this.menu();
    this.identidad = this._loginService.getIdentidad();
    this.token = this._loginService.getToken();
    this.propiedadesUsuario();

  }

 
  cambioPropiedad(valor){
      // console.log(valor);
    this._propiedadService.setPropiedad(this.token, valor);
   
      // console.log(this._propiedadService.getPropiedad());
  }
    
asked by Miguel Angel Gonzalez Jaimen 28.12.2018 в 16:28
source

1 answer

0

I already solved the issue with a Observable .

My mistake was that I was including the service in providers of separate modules; once I included the services in providers of app.module , everything worked correctly.

    
answered by 28.12.2018 / 20:43
source