【问题标题】:Angular: parse a URL into a route and params without following that URL?Angular:在不遵循该 URL 的情况下将 URL 解析为路由和参数?
【发布时间】:2015-05-29 18:47:47
【问题描述】:

假设我有一个使用 $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 等 Angular 服务是否提供了一个函数,该函数将在给定 URL 的情况下将该信息返回给我?

例如,如果我的网站托管在 example.com,并且我调用了这样一个函数,并传入了参数 'http://example.com#/bar/2/blue' 我希望它返回(包含)一个对象,如

{ var2a: 2, var2b: 'blue' }

我认为,由于 Angular 的路由服务显然能够将 URL 从浏览器的地址栏映射到路由和参数列表,因此可能有一种方法可以在我的应用程序中为任何 URL 使用此功能,而无需实际导航到该 URL .有没有?如果没有,是否有第三方库/插件可以与 Angular 集成并执行此操作?

(如果您好奇:我想要这样做的原因是,如果用户在我的应用程序中删除一个实体,我可以清除应用程序的“最近访问的”快捷方式列表中引用该实体 ID 的所有 URL,因此用户不会尝试导航到不再存在的项目。)

感谢所有提供帮助的人!

【问题讨论】:

    标签: angularjs angular-routing


    【解决方案1】:

    $routeParams 正是您要找的。你的SomeOtherController 看起来像这样:

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

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

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

    您应该让删除控制器处理删除相关内容的逻辑。或者至少启动一个任务,让其他东西来处理这个问题。

    【讨论】:

      猜你喜欢
      • 2017-11-09
      • 2021-11-05
      • 2021-09-10
      • 1970-01-01
      • 2019-02-09
      • 1970-01-01
      • 2019-03-28
      • 2020-05-12
      • 2018-07-10
      相关资源
      最近更新 更多