假设我有一个使用$routeProvider
的Angular应用,我的初始化类似于以下内容:
$routeProvider
.when('/foo/:var1', {
templateUrl: 'templates/template-1.html',
controller: 'SomeController'
})
.when('/bar/:var2a/:var2b', {
templateUrl: 'templates/template-2.html',
controller: 'SomeOtherController'
})....
现在假设我有一个URL,我想知道它将映射到的路由的信息(特别是它包含哪些路由参数以及它们的值是什么)而不实际遵循该路由。角色服务(例如$route
,$routeParams
或$routeProvider
是否会提供一个函数,在给定URL的情况下,会将该信息返回给我?
例如,如果我的网站托管在example.com
,我调用了这样一个函数传递参数'http://example.com#/bar/2/blue'
我希望它返回(包含某些东西)像
{ var2a: 2, var2b: 'blue' }
我认为,由于Angular的路由服务显然能够将URL从浏览器的地址栏映射到路径和params列表,因此可能有一种方法可以将此功能用于我的应用程序中的任何URL,而无需实际导航到该URL 。在那儿?如果没有,是否有可以与Angular集成的第三方库/插件并执行此操作?
(如果你很好奇:我想要这样做的原因是,如果用户删除了我的应用程序中的实体,我可以清除应用程序的“最近访问过的”快捷列表中引用该实体ID的任何URL用户不会尝试导航到不再存在的项目。)
感谢任何帮助过的人!
答案 0 :(得分:0)
$routeParams
正是您正在寻找的。您的SomeOtherController
将如下所示:
.controller('SomeOtherController', function($routeParams) {
var myParams = $routeParams; //{ var2a: 2, var2b: 'blue' }
});
编辑:重新阅读您的帖子后,我意识到您似乎想在控制器之外执行此操作,因此$routeParams
不会成为正确的选项那个场景。
在这种情况下,您可以使用$location
来获取路径和任何关联的查询,但是您需要解析它并自己分配对象,因为$location
将不知道{ {1}}和:var2a
。 Angular不提供本机功能来根据您的资源结构解析URL而不实际路由到它们,例如使用:var2b
。
您应该让删除控制器处理删除相关内容的逻辑。或者至少开始执行其他任务来完成任务。