假设我有一个使用$routeProvider
的Angular应用程序,我已经初始化了$routeProvider
,如下所示:
$routeProvider
.when('/foo/:var1', {
templateUrl: 'templates/template-1.html',
controller: 'SomeController'
})
.when('/bar/:var2a/:var2b', {
templateUrl: 'templates/template-2.html',
controller: 'SomeOtherController'
})....
现在假设我有一个URL,我想知道它将Map到的路由的信息(特别是它包含哪些路由参数及其值),而不是实际遵循该路由,那么$route
、$routeParams
或$routeProvider
等Angular 服务是否提供了一个函数,在给定URL的情况下,将该信息返回给我?
举个例子,如果我的站点托管在example.com
,并且我调用了这样一个函数,传入参数'http://example.com#/bar/2/blue'
,我希望它返回(包含)一个对象,如
{ var2a: 2, var2b: 'blue' }
我想既然Angular的路由服务显然有能力将浏览器地址栏中的URLMap到一个路由和参数列表中,那么可能有一种方法可以在我的应用程序中为任何URL利用此功能,而无需实际导航到该URL。有这种方法吗?如果没有,是否有第三方库/插件可以与Angular集成并完成此操作?
(In如果你好奇的话我这样做的原因是,如果用户删除应用程序中的实体,我可以清除应用程序“最近访问”快捷方式列表中引用该实体ID的任何URL,这样用户就不会试图导航到不再存在的项。)
谢谢任何帮忙的人!
2条答案
按热度按时间bprjcwpo1#
$routeParams
正是您要查找的。您的SomeOtherController
将如下所示:$routeParams
不是该场景的正确选择。在这种情况下,您可以使用
$location
来获取路径和任何相关的查询,但您需要解析它并自己分配对象,因为$location
不知道:var2a
和:var2b
。Angular没有提供一个原生函数来解析资源结构中的URL,而不像$routeProvider
那样实际路由到它们。你应该让删除控制器来处理删除相关内容的逻辑,或者至少启动一个任务,让其他东西来处理这个问题。
ajsxfq5m2#
如果您需要更灵活地在复杂的URL结构中查找特定的路由元素和最终组件名称,我发现此方法非常有用,具有容错性和未来证明。