Angular:在没有关注该URL的情况下将URL解析为路径和params?

时间:2015-05-29 18:47:48

标签: angularjs angular-routing

假设我有一个使用$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用户不会尝试导航到不再存在的项目。)

感谢任何帮助过的人!

1 个答案:

答案 0 :(得分:0)

$routeParams正是您正在寻找的。您的SomeOtherController将如下所示:

.controller('SomeOtherController', function($routeParams) {
    var myParams = $routeParams; //{ var2a: 2, var2b: 'blue' }
});

编辑:重新阅读您的帖子后,我意识到您似乎想在控制器之外执行此操作,因此$routeParams不会成为正确的选项那个场景。

在这种情况下,您可以使用$location来获取路径和任何关联的查询,但是您需要解析它并自己分配对象,因为$location将不知道{ {1}}和:var2a。 Angular不提供本机功能来根据您的资源结构解析URL而不实际路由到它们,例如使用:var2b

您应该让删除控制器处理删除相关内容的逻辑。或者至少开始执行其他任务来完成任务。