带有参数的Ionic4 navController返回(回调)

时间:2019-06-05 06:31:56

标签: ionic4

只需寻找从子路径发送数据到其父路径的最佳实践。例如,如果我有一个列表视图,并且想要添加一个足够复杂以值得其拥有自己页面的项目,那么如何使添加的项目回到列表视图?现在很明显,我可以重新获取整个列表,但这似乎很愚蠢,效率不高。我发现当路由器导航AddPage时,我还可以在ActivatedRoute参数中传递“回调函数”,但这也感觉不对(尽管我比第一个选项更喜欢它)。如果可以通过nav.back()方法将数据传递回去,那就太好了,但是建议做我需要做的事情是什么?

2 个答案:

答案 0 :(得分:0)

pass in a callback when transitioning(it is not working in ionic4)

 // callback...
 myCallbackFunction = function(_params) {
     return new Promise((resolve, reject) => {
             resolve();
         });
 }

 // push page...
this.navController.navigateForward(["add-product",{"callback": myCallbackFunction}]);

in the AddProductPage
this.activatedRoute.params.subscribe((data: any) => {
     this.callback = data.callback;
    console.log("callback "+this.callback)

});
error:-i m getting data in string form(here i m getting callback data in string format)
output:-
callback "function(_params) {
     return new Promise((resolve, reject) => {
             resolve();
         });
"
 this.callback(param).then(()=>{
    this.navController.pop();
 });

答案 1 :(得分:0)

我按照 Pradeep 所说的去做,并且它的工作原理是: 将 navCtrl 放在您的构造函数参数中:

private navCtrl: NavController,

当你想返回时,在你的代码中的某个地方:

let navigationExtras: NavigationExtras = {
      state: {
        param: "1",
      }
    };
this.navCtrl.navigateBack(['previouspage'], navigationExtras)

在您之前的页面构造函数中:

constructor(
    ........
    private router: Router,
){
 if (this.router.getCurrentNavigation().extras.state && this.router.getCurrentNavigation().extras.state.param) {
  let param = this.router.getCurrentNavigation().extras.state.param
 }
}