如何将当前网址与ui-router状态网址

时间:2015-06-30 02:00:33

标签: angularjs angular-ui-router state

我需要检查我当前的URL是否与状态URL匹配(使用ui-router)。这里的问题是我动态加载我的所有状态,因此当用户刷新页面时,此URL尚未加载,因此我被重定向到其他URL。

我打算在 otherwise 函数中加载我的所有状态,然后检查那个用我当前的URL计算的状态并立即加载它,所以也许这样我未被重定向到我的default网址。

示例:
我当前的网址: asd / 5 / it-is-a-slug
我的州网址: / asd /:id /:slug

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

我要说的是,使用内置的UI-Router是这样的    $urlRouterProvider.deferIntercept(defer) 。检查其他一些:

重点是

$urlRouterProvider.deferIntercept(defer)

  

禁用(或启用)延迟位置更改拦截。

     

如果您希望自定义同步URL的行为(例如,如果您希望延迟转换但保留当前URL),请在配置时调用此方法。然后,在运行时,在配置了自己的$ locationChangeSuccess事件处理程序之后调用$ urlRouter.listen()。

a working example

config() 阶段,我们将推迟执行:

app.config(function ($locationProvider, $urlRouterProvider, $stateProvider) {

    $urlRouterProvider.deferIntercept();
    ...

.run() 阶段,我们将加载动态内容:

$http
  .get("myJson.json")
  .success(function(data)
  {
    angular.forEach(data, function (value, key) 
    { 
      var state = {
        "url": value.url,
        "parent" : value.parent,
        "abstract": value.abstract,
        "views": {}
      };

      angular.forEach(value.views, function (view) 
      {
        state.views[view.name] = {
          templateUrl : view.templateUrl,
        };
      });

      $stateProviderRef.state(value.name, state);
    });
    // Configures $urlRouter's listener *after* your custom listener

    $urlRouter.sync();
    $urlRouter.listen();
  });

示例in action