1

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

単一選択要素の場合はその逆です。

4

2 に答える 2

1

さて、instanceOf または typeOf または .constuctor を使用して、変数が配列または文字列であるかどうかを確認できます

 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
 }
于 2014-05-02T15:59:10.117 に答える
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
}
于 2014-05-02T15:59:17.853 に答える