Angular:如何检查select-element是否为多个并设置选定的选项?

时间:2014-05-02 14:38:07

标签: angularjs angular-services

Angular Service负责根据select和multi-select元素的值构建URL,这让我很疯狂。

multi-select使用数组来存储其选定的值,即使只有一个元素。

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

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

single select只使用一个字符串来存储其选定的值。

{
    "select006": "m30x1.5"
}

我该如何处理这个问题?如何检查select元素是否为多个并将所选选项设置为特定值?

以下是相关代码:

/**
 * 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"
}

单一选择元素的反之亦然。

2 个答案:

答案 0 :(得分:0)

好吧,您可以使用instanceOf或typeOf或.constuctor检查变量是数组还是字符串:请参阅此处http://tobyho.com/2011/01/28/checking-types-in-javascript/

 if(myVariable instanceOf Array){
     //multi select
 } else if(myVariable.constructor === String){
     //single select
 }

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

 $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
 }

答案 1 :(得分:0)

假设您的输入可能是:

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

$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
}