如何填充AngularJS嵌套类别下拉列表?

时间:2015-05-27 23:34:33

标签: angularjs

在我的后端,我有一个嵌套的类别结构:

Category
--------
id
parent_id
name

我将$scope.categories完全加载为单维数组。

在屏幕上,我想显示每个级别的一个下拉列表,显示相应的路径。例如,如果路径是cars / sedan / ford / taurus,我想显示四个下拉菜单:

  

Cars v Sedans v Ford v Taurus v

每当更改下拉列表时,应删除右侧的下拉列表,并使用父项是我刚刚选择的所有子类别填充当前的下拉列表。常规的东西。

我还创建了一个category_path数组,其中包含产品类别路径中的每个category_id:[null, category_id, category_id, category_id]

然后我这样做了:

<select
    ng-repeat="item in category_path"
    ng-model="selected_category[$index]"
    ng-options="category.name for category in (categories | filter : { parent_id: item } : true ) track by category.id "
    ng-change="select_category(selected_category[$index], $index)"
    ></select>

在我的控制器上:

$scope.select_category = function ( selected_category, index ) {

    if ( $filter('filter') ($scope.categories, { parent_id: selected_category.id }, true).length ) {
        if ( $scope.category_path[index+1] != undefined ) {
            $scope.category_path = $scope.category_path.slice(0, index+1);
            $scope.category_path[index+1] = selected_category.id;
        } else {
            $scope.category_path.push( selected_category.id );
        }
    } else {
        $scope.product.category_id = selected_category.id;
    }

}

这就像魅力一样,除了我不能根据当前产品category_path数组填充每个下拉列表的默认值。

我试过了:

ng-init="select_category[$index] = category_path[$index]"

没有成功。想法?

1 个答案:

答案 0 :(得分:2)

您的category_path数组包含的值与模型不同,即selected_category数组。后者似乎持有JSON字符串,而前者持有单个值(对于id键)。

要使默认值有效,请将完整的JSON对象插入模型数组中。