Angularjs 如何将当前url与ui路由器状态url匹配
我需要检查我的当前URL是否与状态URL匹配(使用ui路由器)。这里的问题是,我正在动态加载我的所有状态,因此当用户刷新页面时,此URL尚未加载,因此我被重定向到其他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
示例:
我当前的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获取状态),请参见以下答案: