Angularjs :从列表中选择组合

Angularjs : Select combination from a list

本文关键字:选择 组合 列表 Angularjs      更新时间:2023-09-26

我有一个简单的列表:

$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

我实际上想尊重开始数组($scope.myArr)的可能组合

关于如何实现它的任何想法?

http://jsfiddle.net/uxo0jue3/

您可以循环数组、拆分值并创建分级对象。只需将其链接到视图:

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/