繁体   English   中英

Angular.js从对象的先前ng-options选择中获取ng-options列表

[英]Angular.js getting ng-options list from previous ng-options selection in object of objects

我有一个对象:

object: {
    "id":"1",
    "name":"name1",
    "number":"number1",
    ...,
    "subObject":[{
        "id":"1",
        "name":"subName1"},
        {
        "id":"2",
        "name":"subName2"}
    ]};

我正在使用ng-options选择object.name值,但是有一个单独的ng-options,我只想查看与首先选择的object.name值关联的名称的“ subObject”列表。 显然,此Object [object]比上面的示例更复杂,但这就是结构的要旨。

当前,要获得object.name值的值,我有:

<label>Object Name</label>
<select ng-options="object.name as object.name for object in Parent.objects track by object.name" ng-model="mainName" ng-value="Parent.thisState.objects.name"></select>

仅选择对象名称而不是首先选择整个对象时,是否可以获得子对象名称列表?

让我们考虑这是包含子对象的主要对象。

$scope.objects = [{
  id: 1,
  name: 'object one',
  subitems: [{
    id: 1,
    name: 'subitem one of obj 1'
  }, {
    id: 2,
    name: 'subitem two of obj 1'
  }, {
    id: 3,
    name: 'subitem three of obj 1'
  }]
}, {
  id: 2,
  name: 'object two',
  subitems: [{
    id: 1,
    name: 'subitem one of obj 2'
  }, {
    id: 2,
    name: 'subitem two of obj 2'
  }, {
    id: 3,
    name: 'subitem three of obj 2'
  }]
}, {
  id: 3,
  name: 'object three',
  subitems: [{
    id: 1,
    name: 'subitem one of obj 3'
  }, {
    id: 2,
    name: 'subitem two of obj 3'
  }, {
    id: 3,
    name: 'subitem three of obj 3'
  }]
}];

这将是您的html,

  <select ng-model="s1" ng-options="obj as obj.name for obj in objects"></select>

<select ng-model="s2" ng-options="subobj.name as subobj.name for subobj in s1.subitems" ng-disabled="!s1"></select>

默认情况下,子对象选择字段将被禁用(因为它没有任何父值)。 在mainObject seclect字段中选择值后,第二个字段将填充父级的选定subObjects

有可能以不同的方式达到预期的结果。

下面的示例是一个可能的解决方案,其中在从第一个选择中选择对象时,我们直接将它们提供给第二个选择要使用的$ scope变量。

标记

<body ng-app="myApp" ng-controller="myController">
    <select ng-model="selectedFromList" 
    ng-options="object.subitems as object.name for object in list track by object.id"></select>
    <select ng-model="selectedFromSubList"
    ng-options="subitems as subitems.name for subitems in selectedFromList"></select>
 </body>

在第一个选择上,我们说我们希望将对象的名称显示as object.name ,可管理对象将是object.subitems ,这些对象将存储在ng-model ng-model="selectedFromList" ;在第二个选择上,我们只是将遍历模型selectedFromList的对象并显示subitems.name

工作

编辑

对于您描述为评论的问题,我建议使用过滤器,因此该名称可以优先出现在首选模型的ng-model上。 我假设该名称是唯一的,因为这是您要发送到“ API”的名称。

过滤代码

.filter('mapArray', function() {
  return function(array, name) {  
    if (!angular.isArray(array)) return array;
    var filter = array.filter(function(value){return value.name === name.name;})[0];
    if (filter === undefined) return [];
    return filter.subitems;
  }
})

标记

<body ng-app="myApp" ng-controller="myController">
    <select ng-model="selectedFromList" 
    ng-options="object.name as object.name for object in list"></select>
    <select ng-model="selectedFromSubList"
    ng-options="subitems as subitems.name for subitems in 
(list |  mapArray:{name :selectedFromList})"></select>
  </body>

工作

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM