Служба Angular, ответственная за создание URL-адресов из значений элементов select и multi-select, сводит меня с ума.
multi-select
использует массив для хранения выбранных значений, даже если есть только один элемент.
{
"select006": [
"m30x1.5",
"m18x1"
]
}
{
"select006": [
"m30x1.5"
]
}
single 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'
, множественный выбор не будет выбран, так как в angular множественный выбор должен быть массивом.
Это устанавливает выбранный параметр для множественного выбора:
$scope.filter = {
"SA044": ['30mm']
}
Это не работает для множественного выбора:
$scope.filter = {
"SA044": "30mm"
}
Наоборот, для отдельных элементов select.