Angularjs: выберите комбинацию из списка

у меня есть простой список :

$scope.myArr = ["a_b_c","a_b_d","a_e_g","f_t_r","f_t_g","f_u_m"];

из этого я хочу построить 3 <select></select>.

первый будет содержать первые элементы массива, разделенные _. Так что ["a","a","a","f","f","f"]

второй ["b","b","e","t","t","u"]

третий ["c","d","g","r","g","m"]

Я построил эти 3 массива, и я сделал уникальные значения.

что мне нужно, так это, например, если я выберу a в первом выборе, второй будет отображаться только b,b,e.

Я действительно хочу уважать возможные комбинации из массива start ($scope.myArr)

любые идеи о том, как я могу этого достичь ?

http://jsfiddle.net/uxo0jue3/

1 ответов


вы можете зациклить массив, разделить значения и создать выровненный объект. Просто связать его с видом:

var myArr = ["a_b_c","a_b_d","a_e_g","f_t_r","f_t_g","f_u_m"];
var levels = {};

myArr.forEach(function(arr) {
    var split = arr.split("_");
    if (!levels[split[0]])
        levels[split[0]] = {};

    if (!levels[split[0]][split[1]])
        levels[split[0]][split[1]] = []

    if (levels[split[0]][split[1]].indexOf(split[2]) === -1) 
        levels[split[0]][split[1]].push(split[2])
})

$scope.levels = levels;

вид:

<div ng-controller="myAppList">
    <select name="clienT" ng-model="clientW" ng-options="letter as letter for (letter, opts) in levels"></select>
    <select name="projecT" ng-model="clientX" ng-options="letter as letter for (letter, opts) in levels[clientW]"></select>
    <select name="platforM" ng-model="clientZ" ng-options="letter as letter for letter in levels[clientW][clientX]"></select>
</div>

демо:http://jsfiddle.net/uxo0jue3/4/