Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    [Angular] Problema con dato non visibile da observable

    non ho mai avuto tanti problemi in angular come su questo template (a questo punto penso sia il template che ha qualche impostazione che non conosco).

    allora, ho questo service:
    codice:
      getById(id: number): Observable<Mostra> {
        const url = 'assets/fake_data/mostre.json';
        return this.http.get<Mostra[]>(url).pipe(
          map(
            dd => dd.find(res => res.id == id)
          )
        );
      }
    nel componente faccio questo:
    codice:
    import {Component, OnInit} from '@angular/core';
    import {ActivatedRoute} from '@angular/router';
    import {Mostra} from '../../../../_interfaces/mostra';
    import {Opera} from '../../../../_interfaces/opera';
    import {MostreService} from '../../../../_services/mostre.service';
    import {Title} from '@angular/platform-browser';
    import {Observable} from 'rxjs';
    
    @Component({
      selector: 'app-mostra',
      templateUrl: './mostra.component.html',
      styleUrls: ['./mostra.component.scss']
    })
    
    export class MostraComponent implements OnInit {
    
      id: string;
    
      titolo: string;
    
      mostra: Observable<Mostra>;
    
      constructor(
        private route: ActivatedRoute,
        private titleService: Title,
        private mostreSrv: MostreService,
      ) {
      }
    
      ngOnInit(): void {
        this.id = this.route.snapshot.paramMap.get('id') ?? '0';
    
        this.titolo = 'ND';
    
        this.getData();
      }
    
      getData(): void {
        this.mostra = this.mostreSrv.getById(Number(this.id));
        this.mostra.subscribe(obj => {
          this.titleService.setTitle(obj.titolo);
          this.titolo = obj.titolo;
        });
      }
    }
    poi nella pagina:
    codice:
    <p>{{mostra | async}}</p>
    <p>{{titolo}}</p>
    questo quello che vedo:
    codice:
    [object Object]
    ND
    dove sbaglio???

  2. #2
    ho fatto una modifica:
    codice:
    import {Component, OnInit} from '@angular/core';
    import {ActivatedRoute} from '@angular/router';
    import {Mostra} from '../../../../_interfaces/mostra';
    import {Opera} from '../../../../_interfaces/opera';
    import {MostreService} from '../../../../_services/mostre.service';
    import {Title} from '@angular/platform-browser';
    import {Observable} from 'rxjs';
    
    @Component({
      selector: 'app-mostra',
      templateUrl: './mostra.component.html',
      styleUrls: ['./mostra.component.scss']
    })
    
    export class MostraComponent implements OnInit {
    
      id: string;
    
      mostra: Observable<Mostra>;
      mostraObj: Mostra;
      opere: Opera[];
    
      constructor(
        private route: ActivatedRoute,
        private titleService: Title,
        private mostreSrv: MostreService,
      ) {
      }
    
      ngOnInit(): void {
        this.id = this.route.snapshot.paramMap.get('id') ?? '0';
    
        this.getData();
      }
    
      getData(): void {
        this.mostra = this.mostreSrv.getById(Number(this.id));
        this.mostra = this.mostreSrv.getById(Number(this.id));
        this.mostra.subscribe(obj => {
          this.titleService.setTitle(obj.titolo);
          this.mostraObj = obj;
        });
      }
    }
    e nella pagina:
    codice:
    <p>{{mostraObj.titolo}}</p>
    ora vedo il titolo corretto, ma in console mi da una serie di errori tipo questo:
    codice:
    ERROR TypeError: ctx.mostraObj is undefined
        MostraComponent_Template mostra.component.html:1

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.