在$ routeProvider中重定向到不同的URL解析

时间:2015-03-24 18:24:11

标签: javascript angularjs

我正在开发一个具有(以及其他)此端点的应用程序:

.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中的解析仍然被触发了两次

1 个答案:

答案 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()。

如果这不起作用,您可以尝试改进获取事件的服务,缓存没有参数的响应并避免第二次请求的获取