更改$ ionicHistory.backView()的stateParams之后返回

Sel*_*lva 6 angularjs ionic-framework ionic

我正在使用Ionic Framework开发一个Android应用程序.

在那,我有三个观点,view1, view2 and view3.

导航会像 view1 -> view2 -> view3

当回到to view2view3,我需要更改stateParam param1view2以执行某些操作.下面的代码显示我view2在单击后退按钮时更改stateParam值view3

以下是覆盖Android设备backbutton动作的代码

$ionicPlatform.registerBackButtonAction(function() {

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

}, 100);
Run Code Online (Sandbox Code Playgroud)

搬回去之后view2,如果我现在点击后退按钮,它将移动到view3而不是view1.现在我只能够查看view3view2通过单击后退按钮,一点也不移动view1.

如何使返回按钮移动到view1距离view2甚至改变的stateParam值之后view2

Séb*_*ZAT 2

我终于找到了这个问题的解决方案,不幸的是,这是一个黑客,所以它有点难看。

提示不仅要更新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();
Run Code Online (Sandbox Code Playgroud)

在您的具体情况下,它可能只是:

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();
}
Run Code Online (Sandbox Code Playgroud)