一个 Angular 服务,负责从 select 和 multi-select 元素的值构建 URL,这让我抓狂。
Amulti-select
使用一个数组来存储其选定的值,即使只有一个元素。
{
"select006": [
"m30x1.5",
"m18x1"
]
}
{
"select006": [
"m30x1.5"
]
}
Asingle select
仅使用一个字符串来存储其选定的值。
{
"select006": "m30x1.5"
}
我该如何处理这个问题?如何检查选择元素是否为多个并将所选选项设置为特定值?
以下是相关代码:
/**
* Expand multiple values
*
* Convert param values back to an object with array
* of values.
*
* @example ?param=m30x1.5,m18x1 becomes {"select006": ["m30x1.5","m18x1"]}
*
* @param filters
* @returns {object}
* @private
*/
var _expandMultipleValues = function (filters) {
var param = {};
for (var filter in filters) {
if (filters.hasOwnProperty(filter)) {
if (filters[filter].indexOf(',') > -1) {
param[filter] = filters[filter].split(',');
} else {
// multiple needs to be an array to set selected option
// param[filter] = [filters[filter]];
// singe needs to be an string to set selected option
// param[filter] = filters[filter];
}
}
}
return param;
};
看来我需要更具体。这里的问题是我需要一个数组来为多个选择设置一个选定的选项(即使只选择了一个),但是一个用于单个选择的字符串。
我在 $scope 中有一个变量,其中包含选定的元素:
$scope.filter = {
"SA152": ["lorem", "ipsum"],
"SA044": ["30mm"],
"SA034": "m8x3"
}
如果我尝试SA044
使用"SA044": '30mm'
多重选择设置选定的选项,则不会选择角度,多重选择需要是一个数组。
这将为多选设置选定的选项:
$scope.filter = {
"SA044": ['30mm']
}
这不适用于多选:
$scope.filter = {
"SA044": "30mm"
}
对于单选元素,反之亦然。