Cam*_*oSS 6 javascript angularjs angular-ui-router
我想将搜索查询字符串传递给某个州。\nURL 应如下所示:
\n\n/goods?filters[paramA]=1&filters[paramB]=2\nRun Code Online (Sandbox Code Playgroud)\n\n我的状态设置如下:
\n\n.state(\'goods\', {\n url: \'/goods?filters\',\n \xe2\x80\xa6\n })\nRun Code Online (Sandbox Code Playgroud)\n\n我的链接模板如下所示:
\n\n<a ui-sref="goods({ filters: { paramA: 1, paramB: 2}})">Menu item label</a>\nRun Code Online (Sandbox Code Playgroud)\n\n但是,ui-router 没有正确编码它,我得到:
\n\n/goods?filters=[object Object]\nRun Code Online (Sandbox Code Playgroud)\n\n我该如何正确地做呢?
\n为了完成您想要的事情,您需要使用$stateParams而不是您尝试使用的查询字符串。(虽然可以使用查询字符串,但使用 $stateParams 更容易)
首先,您需要使用状态分配/注册参数:
$stateProvider
.state('someState', {
url: "/someLinkPath/:Param1",
templateUrl: 'stateHTML.html',
controller: function ($stateParams) {
console.log($stateParams);
}
});
Run Code Online (Sandbox Code Playgroud)
然后,您可以构造一个 $stateParams 对象并将其传递到所需状态的链接中。
如果您确实需要使用查询字符串,那么您需要展平添加到字符串中的对象
您可以使用 $.param (jQuery):
var yourParams = $.param({ param1: Value1, param2: Value2 });
Run Code Online (Sandbox Code Playgroud)
或者编写你自己的普通 JS 函数,如下所示:
function toQueryString(obj) {
var parts = [];
for (var i in obj) {
if (obj.hasOwnProperty(i)) {
parts.push(encodeURIComponent(i) + "=" + encodeURIComponent(obj[i]));
}
}
return parts.join("&");
}
Run Code Online (Sandbox Code Playgroud)
编辑:在进一步考虑您的问题之后,我认为问题在于您的参数周围有一个对象包装器。当你使用这个时:
<a ui-sref="goods({ filters: { paramA: 1, paramB: 2}})">Menu item label</a>
Run Code Online (Sandbox Code Playgroud)
我认为通过这样做, ui-sref 不知道如何处理带有子对象的对象(过滤器)。您需要做的是传递一个对象,我认为如果您可以更改代码以仅将参数作为对象传递,您的代码将起作用。
<a ui-sref="goods({ paramA: 1, paramB: 2})">Menu item label</a>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15739 次 |
| 最近记录: |