Como passar parâmetros para outra tela com Ionic

Recentemente precisei criar uma página de busca no meu app criado com Ionic. Mas o resultado da minha busca não ficaria nessa página, mas em outra página então precisei mandar para o construtor da outra página alguns valores.

Eu estou usando Ionic 4 então quase não encontrei conteúdo sobre o assunto. Então resolvi compartilhar com vocês como é feito.

Essa solução foi introduzida no Angular 7.2

Vamos usar o state para passar um objeto, você pode passar qualquer tipo de objeto por parâmetro. A estrutura do projeto está separado em duas telas. Uma de detalhes e outra que é aonde está o filtro.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
import { Component } from '@angular/core';
import { Router, NavigationExtras } from '@angular/router';
@Component({
selector: 'app-filter',
templateUrl: 'filter.page.html',
styleUrls: ['filter.page.scss'],
})
export class FilterPage {
valorParaEnviar = {
name: 'Micael Pereira',
website: 'micaelpereira.com.br',
Angular: {
version: 7,
year: 2019
},
Libs: [
'Vue', 'React', 'Jquery'
]
};
constructor(private router: Router, private dataService: DataService) { }
enviarInfosViaState() {
let navigationExtras: NavigationExtras = {
state: {
valorParaEnviar: this.valorParaEnviar
}
};
this.router.navigate(['feed'], navigationExtras);
}
}
import { Component } from '@angular/core'; import { Router, NavigationExtras } from '@angular/router'; @Component({ selector: 'app-filter', templateUrl: 'filter.page.html', styleUrls: ['filter.page.scss'], }) export class FilterPage { valorParaEnviar = { name: 'Micael Pereira', website: 'micaelpereira.com.br', Angular: { version: 7, year: 2019 }, Libs: [ 'Vue', 'React', 'Jquery' ] }; constructor(private router: Router, private dataService: DataService) { } enviarInfosViaState() { let navigationExtras: NavigationExtras = { state: { valorParaEnviar: this.valorParaEnviar } }; this.router.navigate(['feed'], navigationExtras); } }
import { Component } from '@angular/core';
import { Router, NavigationExtras } from '@angular/router';
 
@Component({
  selector: 'app-filter',
  templateUrl: 'filter.page.html',
  styleUrls: ['filter.page.scss'],
})
export class FilterPage {
 
  valorParaEnviar = {
    name: 'Micael Pereira',
    website: 'micaelpereira.com.br',
    Angular: {
      version: 7,
      year: 2019
    },
    Libs: [
      'Vue', 'React', 'Jquery'
    ]
  };
 
  constructor(private router: Router, private dataService: DataService) { }
 
  enviarInfosViaState() {
    let navigationExtras: NavigationExtras = {
      state: {
        valorParaEnviar: this.valorParaEnviar
      }
    };
    this.router.navigate(['feed'], navigationExtras);
  }
}

O código anterior é o meu .ts referente a página de filtro.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
import { Component, OnInit } from '@angular/core';
import { ActivatedRoute, Router } from '@angular/router';
@Component({
selector: 'app-feed',
templateUrl: './feed.page.html',
styleUrls: ['./feed.page.scss'],
})
export class FeedPage implements OnInit {
data: any;
constructor(private route: ActivatedRoute, private router: Router) {
this.route.queryParams.subscribe(params => {
let getNav = this.router.getCurrentNavigation();
if (getNav.extras.state) {
this.data = getNav.extras.state.valorParaEnviar;
}
});
}
ngOnInit() { }
}
import { Component, OnInit } from '@angular/core'; import { ActivatedRoute, Router } from '@angular/router'; @Component({ selector: 'app-feed', templateUrl: './feed.page.html', styleUrls: ['./feed.page.scss'], }) export class FeedPage implements OnInit { data: any; constructor(private route: ActivatedRoute, private router: Router) { this.route.queryParams.subscribe(params => { let getNav = this.router.getCurrentNavigation(); if (getNav.extras.state) { this.data = getNav.extras.state.valorParaEnviar; } }); } ngOnInit() { } }
import { Component, OnInit } from '@angular/core';
import { ActivatedRoute, Router } from '@angular/router';

@Component({
  selector: 'app-feed',
  templateUrl: './feed.page.html',
  styleUrls: ['./feed.page.scss'],
})
export class FeedPage implements OnInit {

  data: any;

  constructor(private route: ActivatedRoute, private router: Router) {
    this.route.queryParams.subscribe(params => {
      let getNav = this.router.getCurrentNavigation();
      if (getNav.extras.state) {
        this.data = getNav.extras.state.valorParaEnviar;
      }
    });
  }

  ngOnInit() { }
}

No segundo temos o código para pegar o valor que foi enviado.

Podendo assim trabalhar com o valor de diferentes formas. passando para um serviço para fazer o get em um servidor com os parâmetros.

Quer aprender mais de ionic, indico esse curso: http://bit.ly/2VdoFlY

Comentários no Facebook