在我们的商店中,用户选择产品(/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
。
有什么建议吗?
谢谢!
答案 0 :(得分:1)
概述可能的解决方案:
orderId
,取决于您的确切用例)shop/individualization
(或导航到shop/details
的{{1}}的操作)设置服务中的shop/individualization
orderId
和shop/individualization
定义shop/details
reloadOnSearch: false
和shop/individualization
将网址搜索参数绑定到服务;控制器逻辑可以是:
shop/details
请记住:
您正在做的事情使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
});
可收藏,以便用户可以随时返回查看旧订单。该系统应准备好处理这种情况,例如:从服务器重新加载订单。如果书签是不,那么事情就会简化:只需使用该服务并完全删除搜索参数。
您可能还希望在某个时间从shop/details
删除订单对象。