Переходить между ионными страницами

Я получаю данные из данных json: https://jsonplaceholder.typicode.com/posts, и я хочу отображать детали каждого сообщения, когда нажимаю кнопку на другой странице, чтобы отобразить детали: https://jsonplaceholder.typicode.com/posts/3

Я создал провайдера и использую данные, и все работает для домашней страницы, но у меня возникла ошибка при передаче идентификатора сообщения методу, который выполняет поиск сообщения по идентификатору!

провайдер:

import { HttpClient } from '@angular/common/http';
import { Injectable } from '@angular/core';
import { URLS } from '../urls/postUrls'

@Injectable()
export class PostsProvider {

  constructor(public http: HttpClient) {
  }

  getPosts(){
    return new Promise(resolve => {
      this.http.get(URLS.POSTS).subscribe(data => {
        resolve(data);
      }, err =>{
        console.info(err);
      });
    });
  }

  getPostByID(id){
    for (let i = 0; i < this.getPosts.length; i++) {
      if (this.getPosts[i].id == id) {
        return Promise.resolve(this.getPosts[i]);
      }
    }
  }


}

home.ts

import { Component     } from '@angular/core';
import { NavController } from 'ionic-angular';
import { PostsProvider } from '../../providers/posts/posts';
import { PostPage } from '../post/post'

@Component({
  selector: 'page-home',
  templateUrl: 'home.html'
})
export class HomePage {

  posts: any;

  constructor(public navCtrl: NavController, public postsProvider: PostsProvider) {
    this.getPosts();
  }

  getPosts() {
    this.postsProvider.getPosts()
    .then(data => {
      this.posts = data;
    });
  }


  postDetails(id){
    this.navCtrl.push(PostPage, { id: id });
  }


}

home.html

<ion-content >
    <ion-card *ngFor = "let post of posts">
      <img src = "https://placekitten.com/760/300"/>
      <ion-card-content>
        <ion-card-title class = "post-title">
          {{ post.title }}
        </ion-card-title>
        <p class = "post-content">
          {{ post.body | slice:0:80}} ...
        </p>
        <button ion-button button-small read-more (click) = "postDetails(post.id);">Read more</button>
      </ion-card-content>
    </ion-card>
  </ion-content>

post.ts

import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams } from 'ionic-angular';
import { PostsProvider } from '../../providers/posts/posts';

@IonicPage()
@Component({
  selector: 'page-post',
  templateUrl: 'post.html',
})
export class PostPage {

  post: any=0;
  constructor(public navCtrl: NavController, public navParams: NavParams, public postsProvider: PostsProvider) {
    this.postsProvider.getPostByID(this.navParams.get('id')).then( result => {
      this.post = result;
    });
  }

  ionViewDidLoad() {
    console.info('ionViewDidLoad PostPage');
  }

}

post.html

<ion-content padding *ngIf= "post != 0">
  <p>{{ post.title }}</p>
  <strong> {{ post.body}} </strong>

Я не нашел правильного способа передать параметры, чтобы получить страницу с подробностями сообщения! Кто-нибудь может проверить, что происходит с параметром id?

У меня такая ошибка:

ERROR Error: Uncaught (in promise): TypeError: Cannot read property 'id' of undefined

Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
0
0
196
2

Ответы 2

вы можете передать дыру объект post вот так

 <button ion-button button-small read-more (click) = "postDetails(post)">Read more</button>

в home.ts

 postDetails(post){ 

    this.navCtrl.push(PostPage, { post: post });

  }

затем в postPage

     constructor(public navCtrl: NavController, public navParams: NavParams, public postsProvider: PostsProvider) {
          this.post = this.navParams.get('post');
  }
id: any = 0;        
constructor(public navCtrl: NavController, public navParams: NavParams, public postsProvider: PostsProvider) {


 this.id = this.navParams.get('id')
    this.getPostDetails()

}

getPostDetails(){
        this.postsProvider.getPostByID(this.id).then( result => {
        this.post = result;
    });

попробуйте также заменить * ngIf = "post"

azza 26.09.2018 15:04

Другие вопросы по теме