2014-07-21 2 views
1

Я хочу получить все имена задач как идентификатор задачи, где массив задач хранится в массиве групп. Я пытаюсь получить его в директиве ng-options angularJS. Вот ссылка http://jsfiddle.net/753YB/16/ для быстрого редактирования. благодарим заранее! Я знаю, что в одном массиве это task.Id as task.Name for task in Tasks, но мои задачи вложены в группы, поэтому мне нужны задания во всех группах.Двойной цикл для получения Ng-опций

$scope.Groups = [{ 
     Name: 'a1', 
     Id: 1, 
     Tasks:[{Name: 'Some Name' Id: 1},{Name: 'Some Name 2' Id: 2}] 
    }, { 
     Name: 'c2', 
     Id: 2, 
     Tasks:[{Name: 'Some Name 3' Id: 3},{Name: 'Some Name 4' Id: 4}] 
    }, 
     { 
     Name: 'c2', 
     Id: 3, 
     Tasks:[{Name: 'Some Name 3' Id: 5},{Name: 'Some Name 4' Id: 6}] 
    }]; 
+1

Я не думаю, что можно с этой моделью структуры. Возможно, вам придется сгладить вашу модель в списке задач. – runTarm

+0

+1 runTarm это не сработает, если структура не изменится часто, вы можете извлекать задания в отдельный массив, и если вам не нужно использовать ng-options, вы можете попытаться достичь этого с помощью ng-repeat – maurycy

ответ

3

Вы можете придавить структуру данных с помощью следующей функции:

function flattenArray(array, fn) { 
    var output = []; 
    for(var i = 0; i < array.length; ++i) { 
     var result = fn(array[i]); 
     if (result) 
     output = output.concat(result); 
    } 
    return output; 
} 

вызывает функцию, передавая ей массив и обратный вызов элемента. Обратный вызов возвращает подматрицу.

$scope.Groups = flattenArray(groups, function(item) { 
    return item.Tasks; 
}); 

Demo Fiddle

+0

Спасибо за Ваш ответ :) – Muffin