我正在开发一个具有(以及其他)此端点的应用程序:
.when('/service/:id?', {
templateUrl: 'views/service.html',
controller: 'ServiceCtrl',
resolve: {
service: function($q, Caregiver, $route) {
return $q(function(resolve, reject) {
if (!Caregiver.isLoggedIn()) {
reject();
} else {
resolve(Caregiver.getService($route.current.params.id));
}
});
}
}
})
Caregiver.getService(id)
将通过AJAX向我提供具有该ID的服务。但由于它是一个可选参数,如果它未定义,则返回的服务将是今天发生的下一个。
我想要的是,无论是什么情况,一旦我们知道我们将展示哪个服务(及其ID),应用程序就会重定向到/service/:id
。如果用户转到/service
,我想制作一个$location.replace('/service/' + service.id);
,以便它完全透明。但是,如果我进行重定向,那么将再次执行解析,并两次获取相同的事件。
我试过像this这样的黑客一旦我们进入内部就禁止重新加载页面,我可以看到控制器只运行一次,但是$ routeProvider中的解析仍然被触发了两次
答案 0 :(得分:0)
你可以尝试注册一个简单重定向
的路由'/ service'redirectTo - {(string | function())=} - 使用和触发路由重定向更新$ location路径的值。
文档为here
如果redirectTo是一个函数,将使用以下函数调用它 参数:
{Object。} - 从当前提取的路由参数 $ location.path()通过应用当前路由templateUrl。 {string} - current $ location.path(){Object} - 当前$ location.search() 自定义redirectTo函数应该返回一个字符串 用于更新$ location.path()和$ location.search()。
如果这不起作用,您可以尝试改进获取事件的服务,缓存没有参数的响应并避免第二次请求的获取