【问题标题】:Ionic $ionicHistory.goBack with different $stateParams具有不同 $stateParams 的离子 $ionicHistory.goBack
【发布时间】:2016-08-04 18:43:41
【问题描述】:

TL;DR

有没有办法使用 $ionicHistory.goBack(-2) 更改我要返回的状态的 $stateParams?


我正在使用 Ionic 开发一个小应用程序,但我面临以下问题:

我有几个状态是整个过程的一部分:productInfo、选择和比较。用户选择一个产品,然后它的信息显示在 state productInfo 中。所选产品通过$stateParams

productInfo 状态

$stateProvider.state('productInfo', {
      url: '/compare/info',
      params: {
        product: null
      },
      cache: false,
      views: {
        'main-screen': {
          templateUrl: 'templates/modules/comparator/info.html',
          controller: 'CompareInfoCtrl',
          controllerAs: 'product'
        }
      }
})

在productInfo中,有一个比较按钮,用户可以在其中进行选择,然后选择另一个产品与第一个产品进行比较。

当用户在选择状态下确认他的选择时,应用程序会进入最后一个状态,即比较,显示两个产品的结果。

在最后一个状态(比较)中,如果用户单击其中一个产品,应用程序必须返回到状态 1,productInfo,并选择单击的产品。

我使用$ionicHistory.goBack(-2) 而不是$state.go('productInfo') 来避免弄乱我的后退按钮(每个屏幕都有一个默认按钮,它只调用$ionicHistory.goBack())。

问题出现了:我无法更改 productInfo 状态的$stateParams,因此会显示最后选择的产品。

理想的情况是$ionicHistory.goBack(-2, {product: obj})

我的最后一张照片是:

this.$ionicHistory.viewHistory().views[this.$ionicHistory.backView().backViewId].stateParams.id = this.selectedProduct.id;
this.$ionicHistory.goBack(-2);

但这会创建新的历史记录,因此无法按预期工作。

【问题讨论】:

  • 在我看来,您需要想出一种方法来返回 3,然后再前进 1
  • 我稍后会尝试,我担心过渡,但值得一试。谢谢!
  • 使用该解决方案后,我还必须调用 removeBackView()。此外,如果用户单击之前的相同产品,则不会以某种方式呈现状态。
  • 我能想到的一种方法是使用视图事件,例如 beforeEnter 钩子。如果来自正视图,则更改状态参数

标签: javascript angularjs ionic-framework angular-ui-router


【解决方案1】:

您是否尝试过清除前两个视图('productInfo'、'comparison'),然后进入请求状态。它会是这样的:

$ionicHistory.removeBackView();
$ionicHistory.removeBackView();
$state.go('productinfo', {product: <selected-product>});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-08
    • 1970-01-01
    • 2016-07-07
    • 2021-12-11
    • 2021-06-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多