在离子2中的页面之间传递一个数组

Posted

技术标签:

【中文标题】在离子2中的页面之间传递一个数组【英文标题】:Passing an array between pages in ionic 2 【发布时间】:2017-11-06 02:12:18 【问题描述】:

我是 Ionic 2 的新手,在页面之间传递数据时遇到了麻烦。在我的 Home.ts 文件中,我有一个全局数组,其中包含我计算的一些数字,我想将它传递给我的 Table.ts 文件,以使用 *ngFor 方法在 html 表中显示它。

这是 Home.ts 中的函数,我在其中填充数组并尝试推送(我将跳过计算,因为我知道它们是正确的)。

`import  Component  from '@angular/core';
 import  AlertController  from 'ionic-angular';
 import  IonicPage,NavController, NavParams from 'ionic-angular';
 import Table from '../table/table';

 export class HomePage 

 averagesList: Array <number> =[];

 constructor(public alerCtrl: AlertController,
             public navCtrl: NavController,
             public navParams: NavParams)
             

 Calculate()

 var Averages=[];

 //Calculations on the 'Averages' Array

 this.averagesList = Averages;


this.navCtrl.push(Table,this.averagesList);
 


所以我尝试在我的 Table.ts 文件中打印它,但它给了我未定义的结果

import  Component  from '@angular/core';
import  IonicPage, NavController, NavParams  from 'ionic-angular';
import HomePage from '../home/home';
@IonicPage()
@Component(
selector: 'page-table',
templateUrl: 'table.html',
)
export class Table


constructor(public navCtrl: NavController, public navParams: NavParams) 



ionViewDidLoad() 

console.log(this.navParams.get('averagesList'));


我尝试传递一个 let 变量并且它有效,那么为什么它不适用于数组?

【问题讨论】:

【参考方案1】:

最好使用服务来传递嵌套数据。在你的情况下计算对象。

您可以创建 messageService 并监听更改,如下所示。

import Injectable from '@angular/core';
import Observable from 'rxjs';
import Subject from 'rxjs/Subject';

@Injectable()

 export class LocalMsgService   

private subject = new Subject();

sendMessage(message) 
    this.subject.next(message);


clearMessage() 
    this.subject.next();


  getMessage(): Observable<any> 
     return this.subject.asObservable();
  

可以在你的home.ts和table.ts页面中使用如下

首页.ts

    //other imports comes here 
    import LocalMsgService from 'services/localMsg';


    @Component(
        selector: 'home-component',
        templateUrl: 'home.html'
    )
    export class HomePage 
        constructor( private msgService: LocalMsgService) 

          

        dataToPass() 
            console.log(this.averagesList);
            this.msgService.sendMessage(this.averagesList);
        

    

表格.ts

       //other imports comes here 
       import LocalMsgService from 'services/localMsg';
       import Subscription from 'rxjs/Subscription';


        @Component(
           selector: 'page-table',
          templateUrl: 'table.html',
        )

        export class TablePage

            items: any;
            subscription: Subscription;

            constructor(
            public localMsgService : LocalMsgService) 
                this.subscription = this.localMsgService.getMessage().subscribe(msg => 
                    this.items = msg;
                );
            

        

【讨论】:

【参考方案2】:

你的错误是使用console.log(this.navParams.get('averagesList'));

这里的“averagesList”是关键。

要以这种方式获取,您需要发送为:

this.navCtrl.push(Table,'averagesList' : this.averagesList);

其他:

如果您直接发送为

this.navCtrl.push(Table,this.averagesList);

您可以像这样检索值:

console.log(this.navParams.data);

【讨论】:

【参考方案3】:

您可以使用服务来执行此操作。就像在 angular2 中一样,您可以在构造函数中导入服务并像这样使用属性。

import OnInit from '@angular/core';
import someService from ./somepath;
 ...
 export class someClass implements OnInit
let myTmpVar; //we will capture the shared data in this variable
constructor (private smService: someService) ... 
ngOnInit 
   this.myTmpVar = this.smService.SharedServiceData;

...

【讨论】:

以上是关于在离子2中的页面之间传递一个数组的主要内容,如果未能解决你的问题,请参考以下文章

使用session在jsp页面之间传递多维数组,用于实现全局变量的效果

如何在不使用离子的this.navCtrl.push(PostPage,data)的情况下将数据传递到另一个页面

如何在离子页面上触发 ngOnInit

小程序页面传递数据 、传递数组对象 小程序传值

在 Windows Phone 8 中的页面之间传递字符串

用js传递HTML之间的参数