如何在提供者和页面之间传递数据?

How to pass data between provider and page?

我正在尝试从 google 地图提供商获取纬度和经度值并将它们传递到我的 ListPage,但我无法使用 NavController 来完成。

导入的导航控制器:

import {NavController, NavParams} from 'ionic-angular';

已导入 ListPage:

import { ListPage } from '../pages/list/list';

构造函数:

constructor(private navController: NavController, private navParams: NavParams)

代码:

 this.navController.push(ListPage, {
    lat: lat1, lon: lon1
});

一切看起来都很好,但我明白了

No Provider for NavController

错误。

更新:

糟糕,我没有注意到您正在使用服务。 Pablo Albaladejo 是对的。您不能在服务中使用 NavController,因为这可能会破坏导航堆栈或使其变得非常混乱。

一种四处走动的方法是按照 Pablo 的建议加载 App

另一种方法是使用 Ionic 提供的 Events 在视图之间进行通信。我个人喜欢它,因为这给了我更多的自由,而不是只将服务绑定到一个视图。

https://ionicframework.com/docs/api/util/Events/

原版

你走在正确的道路上。您只需要导入 NavParams

import { NavController, NavParams } from 'ionic-angular';

施工人员:

constructor(private navController: NavController, private navParams: NavParams)

所以在你推送视图的情况下

this.navController.push(ListPage, {
    lat: lat1, lon: lon1
});

现在您可以访问参数:

this.lat = navParams.get('lat');
this.lot = navParams.get('lot');

无法从 @Injectable() 构造函数调用 NavController

1) 从构造函数中删除 private navController: NavController

2) 添加 import { App } from 'ionic-angular';

constructor(public connectivityService: Connectivity, public app: App)

3) 添加此功能

get navCtrl(): NavController {
   return this.app.getActiveNav();
}

4)

this.navCtrl.push(ListPage, { lat: lat1, lon: lon1 });

5) 在 ListPage

constructor(public navParams: NavParams){
let lat = this.navParams.get('lat'); 
let lon = this.navParams.get('lon'); 
console.log(lat,lon); 
}