Angularjs 角度:如何检查选择元素是否为多个元素并设置选定选项?

Angularjs 角度:如何检查选择元素是否为多个元素并设置选定选项?,angularjs,angular-services,Angularjs,Angular Services,一个角度服务,负责从select和multi-select元素的值构建URL,这让我抓狂 多选使用数组存储其选定值,即使只有一个元素 { "select006": [ "m30x1.5", "m18x1" ] } { "select006": [ "m30x1.5" ] } 单选仅使用字符串来存储其选定值 { "select006": "m30x1.5" } 我如何处理这个问题?如何检查选择元素是否为多

一个角度服务,负责从select和multi-select元素的值构建URL,这让我抓狂

多选
使用数组存储其选定值,即使只有一个元素

{
    "select006": [
        "m30x1.5",
        "m18x1"
    ]
}

{
    "select006": [
        "m30x1.5"
    ]
}
单选
仅使用字符串来存储其选定值

{
    "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;
};
看来我需要更具体一点。这里的问题是,我需要一个数组来为多个选择设置一个选定选项(即使只选择了一个),但为单个选择设置一个字符串

if ($scope.data.select006 instanceof Array) 
{
    // this is a multi-select, 
    // $scope.data.select006 is an array of selections
} 
else 
{
    // this is a single-select, 
    // $scope.data.select006 is the single selection value
}
我在$scope中有一个变量,其中包含选定的元素:

$scope.filter = {
    "SA152": ["lorem", "ipsum"],
    "SA044": ["30mm"],
    "SA034": "m8x3"
}
如果我尝试使用
的“SA044”设置
SA044
的所选选项:“30mm”
将不会选择多选,因为在角度上,多选需要是一个数组

这将为多选设置所选选项:

$scope.filter = {
    "SA044": ['30mm']
}
$scope.filter = {
    "SA044": "30mm"
}
这不适用于多选:

$scope.filter = {
    "SA044": ['30mm']
}
$scope.filter = {
    "SA044": "30mm"
}

对于单个选择元素,反之亦然。

您可以使用instanceOf或typeOf或检查变量是否为数组或字符串。构造函数:请参见此处


或者,您可以简单地将字符串转换为数组并检查数组的长度

 $scope.myVariable = $scope.myPreviousVar.split(','); // or however you want to delimit this
 if($scope.myVariable.length === 1){
     //single select
 } else if($scope.myVariable.length > 1){
     //multi select
 }

假设您的输入可以是:

$scope.data = {
    "select006": "m30x1.5"
}

检查
select006
的值是否为
Array
。如果是的话,它是一个多选,否则,它是一个单选

if ($scope.data.select006 instanceof Array) 
{
    // this is a multi-select, 
    // $scope.data.select006 is an array of selections
} 
else 
{
    // this is a single-select, 
    // $scope.data.select006 is the single selection value
}

谢谢你的评论。我应该说得更具体一些。这里的问题是,我需要一个数组来为多个选择设置一个选定选项(即使只选择了一个),但为单个选择设置一个字符串。类型检查不是我的问题,请查看我的更新。希望我能说清楚我想做什么谢谢你!在这里,类型检查并不能解决我的问题。请看我的更新。希望我能弄清楚我要修复什么。你能添加你的html吗?