矩阵url符号是"默认"创建带参数的网址或者更好地使用" old"用符号表示?和&amp ;.我在angular.io文档中没有理解它
localhost:3000/heroes;id=15;foo=foo
或
localhost:3000/heroes?id=15&foo=foo
答案 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字符。
有了矩阵参数,您可以对不同的段进行不同的查询。
什么时候有用?
为您的辅助路由器出口添加查询参数。
对于特殊情况,例如一个视图包含两个组件,每个组件都有自己的分页信息。
如果用户返回此视图,则要保留该信息。