select 要素と multi-select 要素の値から URL を作成する Angular Service は、私を夢中にさせます。
multi-select
は、要素が 1 つしかない場合でも、選択した値を格納するために配列を使用します。
{
"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;
};
もっと具体的にする必要があるようです。ここでの問題は、複数の選択に対して選択されたオプションを設定する配列が必要であり (1 つだけが選択されている場合でも)、単一の選択に対しては文字列が必要なことです。
選択した要素を保持する $scope に変数があります。
$scope.filter = {
"SA152": ["lorem", "ipsum"],
"SA044": ["30mm"],
"SA034": "m8x3"
}
SA044
複数選択で選択したオプションを設定しようとする"SA044": '30mm'
と、Angular では複数選択が配列である必要があるため、選択されません。
これにより、複数選択の選択されたオプションが設定されます。
$scope.filter = {
"SA044": ['30mm']
}
これは複数選択では機能しません:
$scope.filter = {
"SA044": "30mm"
}
単一選択要素の場合はその逆です。