Ionin 3 - NavParams 出现未定义错误
Ionin 3 - NavParams getting undefined error
我正在尝试调用 reddit api 来获取并存储一个列表,然后在 html 中对其进行迭代,这是有效的,但是当我传递列表中单个项目的数据时通过 Navparams 添加详细信息页面会出现未定义错误,但是可以在列表打字稿文件
的 onClick 方法定义中访问数据
代码如下:
home.html
<ion-header>
<ion-navbar>
<ion-title>Home</ion-title>
</ion-navbar>
</ion-header>
<ion-content padding>
<ion-list>
<ion-item *ngFor="let post of posts">
<ion-thumbnail (click)="onPostClicked(post)" item-start>
<img [src]="post.data.thumbnail">
</ion-thumbnail>
<h2>{{post.data.title}}</h2>
<p>{{post.data.author}}</p>
</ion-item>
</ion-list>
</ion-content>
home.ts
import { Component, Injectable } from '@angular/core';
import { NavController } from 'ionic-angular';
import { HttpClient } from '@angular/common/http';
import { PostPage } from '../post/post';
@Component({
selector: 'page-home',
templateUrl: 'home.html'
})
@Injectable()
export class HomePage {
posts: any;
constructor(public navCtrl: NavController, public http: HttpClient) {
this.http.get("https://www.reddit.com/r/aww/top/.json?limit=10&sort=hot")
.subscribe(data => {
this.posts = data.data.children;
})
}
onPostClicked(post: any) {
let singlePost = post;
console.log(singlePost);
this.navCtrl.push(PostPage, singlePost);
}
}
post.html - 我只留下了一个模板
<!--
Generated template for the PostPage page.
See http://ionicframework.com/docs/components/#navigation for more info on
Ionic pages and navigation.
-->
<ion-header>
<ion-navbar>
<ion-title></ion-title>
</ion-navbar>
</ion-header>
<ion-content padding>
</ion-content>
page.ts
import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams } from 'ionic-angular';
/**
* Generated class for the PostPage page.
*
* See https://ionicframework.com/docs/components/#navigation for more info on
* Ionic pages and navigation.
*/
@IonicPage()
@Component({
selector: 'page-post',
templateUrl: 'post.html',
})
export class PostPage {
constructor(public navCtrl: NavController, public navParams: NavParams) {
let post = this.navParams.get("singlePost");
console.log(post);
}
ionViewDidLoad() {
console.log('ionViewDidLoad PostPage');
}
}
你应该在 navCtrl.push()
中传递变量,方法是给出变量名和值,如
this.navCtrl.push(pageName, {varname : value } );
所以,
你的方法应该是
onPostClicked(post: any) {
let singlePost = post;
console.log(singlePost);
this.navCtrl.push(PostPage, {singlePost : singlePost} );
}
确保你的值得到正确的,
console.log(singlePost); //From this line
这里是一个例子,你必须稍微修改一下,
设置参数,
onPostClicked(post: any) {
let singlePost = post;
console.log(singlePost);
if(singlePost){
this.navCtrl.push(PostPage, {'singlePost',singlePost});
}
}
获取参数
let post = this.navParams.get("singlePost");
console.log(post);
那么现在打印正常了
HTML:
home.html
<ion-header>
<ion-navbar>
<ion-title>Home</ion-title>
</ion-navbar>
</ion-header>
<ion-content padding>
<button ion-button (click)="navigateToOtherPage(posts)">Navigate</button>
</ion-content>
contact.html:
<ion-header>
<ion-navbar>
<ion-title>
Contact
</ion-title>
</ion-navbar>
</ion-header>
<ion-content>
<div>
Name: {{data.name}}
</div>
<div>
Name: {{data.age}}
</div>
</ion-content>
TS:
home.ts
import { Component } from '@angular/core';
import { NavController } from 'ionic-angular';
import {ContactPage} from '../contact/contact';
@Component({
selector: 'page-home',
templateUrl: 'home.html'
})
export class HomePage {
posts: object = {
name: 'UnluckyAj',
age: '20'
}
constructor(public navCtrl: NavController) {
}
navigateToOtherPage(params){
this.navCtrl.push(ContactPage, {params: params});
}
}
contact.ts
import { Component } from '@angular/core';
import { NavController, NavParams } from 'ionic-angular';
@Component({
selector: 'page-contact',
templateUrl: 'contact.html'
})
export class ContactPage {
data: any;
constructor(public navCtrl: NavController,
public prm : NavParams) {
this.getDataFromNavigation();
}
getDataFromNavigation(){
this.data = this.prm.get('params')
}
}
我正在尝试调用 reddit api 来获取并存储一个列表,然后在 html 中对其进行迭代,这是有效的,但是当我传递列表中单个项目的数据时通过 Navparams 添加详细信息页面会出现未定义错误,但是可以在列表打字稿文件
的 onClick 方法定义中访问数据代码如下: home.html
<ion-header>
<ion-navbar>
<ion-title>Home</ion-title>
</ion-navbar>
</ion-header>
<ion-content padding>
<ion-list>
<ion-item *ngFor="let post of posts">
<ion-thumbnail (click)="onPostClicked(post)" item-start>
<img [src]="post.data.thumbnail">
</ion-thumbnail>
<h2>{{post.data.title}}</h2>
<p>{{post.data.author}}</p>
</ion-item>
</ion-list>
</ion-content>
home.ts
import { Component, Injectable } from '@angular/core';
import { NavController } from 'ionic-angular';
import { HttpClient } from '@angular/common/http';
import { PostPage } from '../post/post';
@Component({
selector: 'page-home',
templateUrl: 'home.html'
})
@Injectable()
export class HomePage {
posts: any;
constructor(public navCtrl: NavController, public http: HttpClient) {
this.http.get("https://www.reddit.com/r/aww/top/.json?limit=10&sort=hot")
.subscribe(data => {
this.posts = data.data.children;
})
}
onPostClicked(post: any) {
let singlePost = post;
console.log(singlePost);
this.navCtrl.push(PostPage, singlePost);
}
}
post.html - 我只留下了一个模板
<!--
Generated template for the PostPage page.
See http://ionicframework.com/docs/components/#navigation for more info on
Ionic pages and navigation.
-->
<ion-header>
<ion-navbar>
<ion-title></ion-title>
</ion-navbar>
</ion-header>
<ion-content padding>
</ion-content>
page.ts
import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams } from 'ionic-angular';
/**
* Generated class for the PostPage page.
*
* See https://ionicframework.com/docs/components/#navigation for more info on
* Ionic pages and navigation.
*/
@IonicPage()
@Component({
selector: 'page-post',
templateUrl: 'post.html',
})
export class PostPage {
constructor(public navCtrl: NavController, public navParams: NavParams) {
let post = this.navParams.get("singlePost");
console.log(post);
}
ionViewDidLoad() {
console.log('ionViewDidLoad PostPage');
}
}
你应该在 navCtrl.push()
中传递变量,方法是给出变量名和值,如
this.navCtrl.push(pageName, {varname : value } );
所以, 你的方法应该是
onPostClicked(post: any) {
let singlePost = post;
console.log(singlePost);
this.navCtrl.push(PostPage, {singlePost : singlePost} );
}
确保你的值得到正确的,
console.log(singlePost); //From this line
这里是一个例子,你必须稍微修改一下,
设置参数,
onPostClicked(post: any) {
let singlePost = post;
console.log(singlePost);
if(singlePost){
this.navCtrl.push(PostPage, {'singlePost',singlePost});
}
}
获取参数
let post = this.navParams.get("singlePost");
console.log(post);
那么现在打印正常了
HTML:
home.html
<ion-header>
<ion-navbar>
<ion-title>Home</ion-title>
</ion-navbar>
</ion-header>
<ion-content padding>
<button ion-button (click)="navigateToOtherPage(posts)">Navigate</button>
</ion-content>
contact.html:
<ion-header>
<ion-navbar>
<ion-title>
Contact
</ion-title>
</ion-navbar>
</ion-header>
<ion-content>
<div>
Name: {{data.name}}
</div>
<div>
Name: {{data.age}}
</div>
</ion-content>
TS:
home.ts
import { Component } from '@angular/core';
import { NavController } from 'ionic-angular';
import {ContactPage} from '../contact/contact';
@Component({
selector: 'page-home',
templateUrl: 'home.html'
})
export class HomePage {
posts: object = {
name: 'UnluckyAj',
age: '20'
}
constructor(public navCtrl: NavController) {
}
navigateToOtherPage(params){
this.navCtrl.push(ContactPage, {params: params});
}
}
contact.ts
import { Component } from '@angular/core';
import { NavController, NavParams } from 'ionic-angular';
@Component({
selector: 'page-contact',
templateUrl: 'contact.html'
})
export class ContactPage {
data: any;
constructor(public navCtrl: NavController,
public prm : NavParams) {
this.getDataFromNavigation();
}
getDataFromNavigation(){
this.data = this.prm.get('params')
}
}