Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

166
Views
Asynchronous method doesn't work the first time

I'm new in Firebase. I'm using Firestore database and Ionic, I have this problem with an asynchronous call and I can't solve it. Basically in the item variable goes the data that I have saved in the firestore database. But when I want to show them, through a button, in a new html page a strange thing happens, in the url the passed parameter appears and disappears immediately and nothing works anymore. I had a similar problem in the past that I solved using the angular pipe "async" , but in this case it doesn't even work. In detail, I have a list of items in a component:

  ngOnInit() {
    this.itemService.getItemsList().subscribe((res)=>{
      this.Tasks = res.map((t) => {
        return {
          id: t.payload.doc.id,
          ...t.payload.doc.data() as TODO
        };
      })
    });
    
  } 

and in item.service.ts I have defined the function:

constructor(
    private db: AngularFireDatabase,
    private ngFirestore: AngularFirestore,
    private router: Router
) { }

  getItemsList() {
    return this.ngFirestore.collection('items').snapshotChanges();
  }
  getItem(id: string) {
        return this.ngFirestore.collection('items').doc(id).valueChanges();
      }

For each item I have a button to show the detail:

<ion-card *ngFor="let item of Tasks" lines="full">
....
<ion-button routerLinkActive="tab-selected" [routerLink]="['/tabs/item/',item.id]" fill="outline" slot="end">View</ion-button>

In component itemsDescription.ts I have:

  ngOnInit() {
    this.route.params.subscribe(params => {
      this.id = params['id'];
      });
    this.itemService.getItem(this.id).subscribe((data)=>{
    this.item=data;
    });  
  }
 

Finally in html page:

    <ion-card-header>
      <ion-card-title>{{item.id}}</ion-card-title>
    </ion-card-header>
    <ion-icon name="pin" slot="start"></ion-icon>
        <ion-label>{{item.Scadenza.toDate() | date:'dd/MM/yy'}}</ion-label>
    <ion-card-content>{{item.Descrizione}}</ion-card-content>

The Scadenza and Descrizione information are shown, instead id is not. Also the url should be tabs/items/:id but when I click on the button to show the item information, the passed parameter immediately disappears and only tabs/items is displayed. If I remove the data into {{}}, the parameter from the url doesn't disappear

SOLVED I followed this guide https://forum.ionicframework.com/t/async-data-to-child-page-with-ionic5/184197. So putting ? , for example {{item?.id}} now everything works correctly

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Your nested code order not right. You will get the value of id after subscription.

Check this Code:

  ngOnInit() {
    this.route.params.subscribe(params => {
      this.id = params['id'];
 this.profileService.getItem(this.id).subscribe((data)=>{
    this.item=data;
    });  
      });
   
  }
about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!