Angularjs 如何将当前url与ui路由器状态url匹配

Angularjs 如何将当前url与ui路由器状态url匹配,angularjs,angular-ui-router,state,Angularjs,Angular Ui Router,State,我需要检查我的当前URL是否与状态URL匹配(使用ui路由器)。这里的问题是,我正在动态加载我的所有状态,因此当用户刷新页面时,此URL尚未加载,因此我被重定向到其他URL 我计划在函数中加载我的所有状态,否则将检查与我当前URL匹配的状态,并立即加载,因此,通过这种方式,我可能不会被重定向到我的默认URL 示例: 我当前的URL:asd/5/it-is-a-slug 我的州URL:/asd/:id/:slug 有什么想法吗?我想说,这里的方法是使用内置的UI路由器 $urlRouterProv

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

我计划在
函数中加载我的所有状态,否则
将检查与我当前URL匹配的状态,并立即加载,因此,通过这种方式,我可能不会被重定向到我的
默认
URL

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


有什么想法吗?

我想说,这里的方法是使用内置的UI路由器
$urlRouterProvider.deferIntercept(延迟)
。检查其他一些:

关键是

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

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

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();
  });

示例

同意半径,使用延迟截距。关于问题的另一半(如何基于url获取状态),请参见以下答案: