AngularJs在重定向到新位置时更改按钮位置

时间:2014-05-02 10:11:11

标签: javascript angularjs redirect back-button browser-history

在我们的商店中,用户选择产品(/shop/products),然后重定向到第一个自定义页面(/shop/details)。他做了一些自定义并点击了#34; next"。在我们的控制器(productDetailsController)中,我们使用所选属性创建一个新对象(Order),并重定向到下一页(shop/individualization?orderId=2),在那里进一步自定义该订单。每当用户现在使用浏览器后退按钮时,我们希望通过参数使该订单可用于上一页。因此,我们需要更改后退按钮所指向的网址(/shop/details?orderId=2而不是/shop/details)。


简而言之:

/shop/products -nextButton - /shop/details -nextButton - shop/individualization?orderId=2

shop/individualization?orderId=2 -BROWSER-BACK - /shop/details?orderId=2


如果我只是在控制器中使用$location.replace(),它将从shop/individualization?orderId=2后退到产品选择/shop/products

如果我在一个摘要周期内做两个$location.path(),它将忽略第一个:

          // inside the order creation promise...
          var search = {orderId: createdOrder.id};
          $location.path("/shop/details").search(search); 
          $location.path("/shop/individualization").search(search); 

replace()导航到/shop/products时我无法使用/shop/details,因为使用后退按钮仍然需要导航到/shop/products

有什么建议吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

概述可能的解决方案:

  • 服务跟踪订单(可能只是orderId,取决于您的确切用例)
  • shop/individualization(或导航到shop/details的{​​{1}}的操作)设置服务中的shop/individualization
  • orderIdshop/individualization定义shop/details
  • reloadOnSearch: falseshop/individualization将网址搜索参数绑定到服务;控制器逻辑可以是:

    shop/details

请记住:

  1. 您正在做的事情使app.controller("XXX", function($scope, orderService, $location) { // initialization var orderId = $location.search("orderId"); if( orderId ) { orderService.setOrderId(orderId); // setOrderId() could handle loading the order too } else { orderId = orderService.getOrderId(); // reloadOnSearch is false, so this doesn't trigger a navigation if( orderId ) $location.search("orderId",orderId); } // ...rest of controller logic }); 可收藏,以便用户可以随时返回查看旧订单。该系统应准备好处理这种情况,例如:从服务器重新加载订单。如果书签是,那么事情就会简化:只需使用该服务并完全删除搜索参数。

  2. 您可能还希望在某个时间从shop/details删除订单对象。