Ionic 4 Angular 7-将对象/数据传递到另一页

tyn*_*tyn 4 ionic-framework angular-router ionic4 angular7

我想将JSON对象传递给另一个页面。我尝试过的是使用Angular路由器传递JSON字符串,ActivatedRoute如下所示:

this.router.navigate(['details', details]);
Run Code Online (Sandbox Code Playgroud)

然后像这样检索它:

import { ActivatedRoute } from '@angular/router';


constructor(private activatedRoute: ActivatedRoute) { 
  }


ngOnInit() {

  this.activatedRoute.params.subscribe(extras => {
     console.log(extras);
     this.JSONObject = extras;
  });

}
Run Code Online (Sandbox Code Playgroud)

可以这样做,但是嵌套的JSON对象变得无法访问。它变成了这个字符串:

"[object Object]"
Run Code Online (Sandbox Code Playgroud)

字符串化的JSON对象很好,可以在我通过它之前进行访问。另一个问题是,它将JSON字符串附加到url,因此看起来不太好。从我的阅读中也可以看出,传递某种东西不仅仅是一种好id方法。

我在想类似在Android活动之间传递对象作为意图附加项的事情。我已经搜索了文档,论坛和以前的stackoverflow问题,但没有找到任何能使我实现这一目标的解决方案。使用Ionic4中的Angular路由器还有其他方法在页面之间传递对象吗?

tyn*_*tyn 11

我使用带有简单的setter和getter的服务来解决它,就像后来发现的这个问题一样:

Ionic 4. NavParams的替代品

首先,我使用setter和getter创建服务:

import { Injectable } from '@angular/core';

@Injectable({
  providedIn: 'root'
})
export class NavExtrasService {

    extras: any;

      constructor() { }

      public setExtras(data){
        this.extras = data;
      }

      public getExtras(){
        return this.extras;
      }
    }
Run Code Online (Sandbox Code Playgroud)

假设我要从页面A导航到页面B,即页面A:

this.navExtras.setExtras(extras)
this.router.navigateByUrl('page-b');
Run Code Online (Sandbox Code Playgroud)

然后在B页中,我通过这种方式检索了其他内容:

this.location = navExtras.getExtras();
Run Code Online (Sandbox Code Playgroud)

到目前为止,它仍然有效,尽管我仍不确定是否有更好的方法来执行此操作。