Angular2与矩阵url表示法

时间:2016-10-21 07:58:33

标签: angular angular2-routing

矩阵url符号是"默认"创建带参数的网址或者更好地使用" old"用符号表示?和&amp ;.我在angular.io文档中没有理解它

localhost:3000/heroes;id=15;foo=foo

localhost:3000/heroes?id=15&foo=foo

3 个答案:

答案 0 :(得分:39)

Matrix参数绑定到路径段,而查询参数绑定到URL。它们有不同的语义。使用哪一个更合适。 (参见&#34中的链接;另见"以下")。

也许这很难说,因为你总是在URL的末尾看到它,但这也是矩阵参数

localhost:3000/heroes;id=15;foo=foo/bar/baz

参数与heroes相关联。当您访问route.url时,您会看到此

this.route.url.subscribe((url: UrlSegment[]) => {
  let heroes = url[0];
  let heroesMatrix = heroes.parameters();
  // heroes should contain id=5, foo=foo
  let bar = url[1].path;
  let baz = url[2].path;
})
  

矩阵url符号是"默认"创建带参数的网址或者更好地使用" old"用符号表示?

不,两者都可以使用,如何使用(创建)它们是完全不同的

  • 通过在数组中的path元素之后传递一个对象,将矩阵参数绑定到每个路径段

    router.navigate(['/foo', { id:1 }, 'bar', {baz: 2 } ])
    

    您将获得/foo;id=1/bar;baz=2

  • 通过将NavigationExtras作为导航

    的第二个参数传递来创建查询参数
    router.navigate(['/foo'], { queryParams: { bar: 1, baz: 2 }});
    

    您可以/foo?bar=1&baz=2

另见:

更新(免责声明)

如果你阅读了关于可选参数的Angular文档,他们会觉得上面的语义对于使用Angular并不是很重要。我可能不得不同意。 REST API的语义更为重要。

使用Angular应用程序,唯一真正关心这些参数的人就是开发人员。用户并不在乎。它不是REST API,我们应该坚持使用众所周知的语义。对于Angular应用程序,只要我们开发人员知道如何使用params(无论是矩阵还是查询),我们使用哪一个都不重要。

话虽这么说,矩阵参数的编码不那么冗长,所以我个人说,使用矩阵参数可能是最好的方法。

答案 1 :(得分:1)

对于矩阵参数,您还可以订阅参数,而不是将其从网址中剥离。

this.paramSubscription = this.activeRoute.params.subscribe(params => {
  const bar = params['bar'];
  const baz = params['baz'];
});

答案 2 :(得分:0)

两种符号都可以使用,但是“旧”符号有限制。 URL中只能有一个问号one question mark字符。

有了矩阵参数,您可以对不同的段进行不同的查询。

什么时候有用?

为您的辅助路由器出口添加查询参数。

对于特殊情况,例如一个视图包含两个组件,每个组件都有自己的分页信息。

如果用户返回此视图,则要保留该信息。