更改 $ionicHistory.backView() 的 stateParams 后返回上一页

6
我正在使用Ionic Framework开发一款Android应用程序。
其中,我有三个视图,分别是view1、view2和view3。
导航将如下:view1 -> view2 -> view3
当从view3返回到view2时,我需要更改view2的一个stateParam参数param1的值以执行一些操作。以下代码向您展示了当在view3中单击返回按钮时我正在更改view2的stateParam值。
以下是覆盖android设备返回按钮操作的代码。
$ionicPlatform.registerBackButtonAction(function() {

      if ($state.current.name == "view3") {
          $ionicHistory.backView().stateParams = {param1:true};
          $ionicHistory.goBack(); // moves to view2
      } else {
          $ionicHistory.goBack();
      }

}, 100);

在回到view2之后,如果我现在点击返回按钮,它会移动到view3而不是view1。现在我只能通过点击返回按钮查看view3view2,而不能移动到view1

如何使返回按钮从view2移动到view1,即使更改了view2的stateParam值?


尝试使用 $state.go('view2',{param1:true}); - Emre
Emre,我试过了。但是没有运气。结果一样。 - Selva
这将是一种硬编码的方式,但您能否创建一个switch-case并为每个case编写代码? - Emre
2个回答

2

我终于找到了解决那个问题的方法,但不幸的是,它是一个hack,所以有点丑陋。

窍门是不仅要更新stateParams,还要更新stateId。

请参见下面的可重复使用的答案:

var params = {param1:true};
var backView = $ionicHistory.backView();

var stateId = backView.stateName;
for (var key in params) {
    if (params[key] && params[key] !== "") {
        stateId += "_" + key + "=" + params[key];
    }
}

backView.stateParams = params;
backView.stateId = stateId;
$ionicHistory.goBack();

在您的具体情况下,可能只是以下情况:
if ($state.current.name == "view3") {
    var backView = $ionicHistory.backView();
    backView.stateParams = {param1:true};
    backView.stateId = backView.stateName + "_param1=true";
    $ionicHistory.goBack(); // moves to view2
} else {
    $ionicHistory.goBack();
}

1
我遇到了相同的问题,但我的view2是根视图,所以当view3返回到view2时我禁用了返回按钮,这样就使得view3的返回按钮消失了。
   $ionicHistory.backView().stateParams = resultObject;
   $ionicHistory.nextViewOptions({   disableBack: true });//this can
   $ionicHistory.goBack();

使用这段代码,我的程序可以正常运行。至于你的目标,你可以在view2.onenter()中手动添加一个后置视图。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接