У меня есть рекурсивный массив в JS:AngularJS - Как получить доступ к массиву внутри вложенной нг-повтор
[{
type: 'cond',
conditionId: 1,
conditions: undefined
},
{
type: 'cond',
conditionId: 2,
conditions: undefined
},
{
type: 'group',
conditionId: undefined,
conditions: [{
type: 'cond',
conditionId: 3,
conditions: undefined
},
{
type: 'cond',
conditionId: 4,
conditions: undefined
}]
}]
Он отображается в AngularJS с помощью нг-повтора рекурсивно с встроенным шаблоном:
<script type="text/ng-template" id="recursive_template.html">
<div> some logic </div>
<div ng-repeat="cond in cond.conditions" ng-include="'recursive_template.html'"></div>
<div> some more logic </div>
</script>
<div ng-controller="EditRulesController">
<div ng-repeat="cond in conditions" ng-include="'recursive_template.html'" class="row">
</div>
</div>
Все работает нормально. Теперь я хочу удалить один элемент из внутреннего ng-repeat. Я могу получить индекс элемента, который я нажимаю (для удаления), с $ index, также объект cond как параметр на ng-click. Я также могу получить доступ к $ родителю, но он указывает на корень объекта ...
Как получить доступ к внутренней массив без ручного поиска с помощью всего условий массива рекурсивно? Странно, что вы можете легко получить доступ к индексу внутреннего массива, но не к фактическому экземпляру массива.
И любой совет по этому вопросу? Спасибо ..
EDIT 21/03/2016
До принятого ответа, 'грубой силы' версии реализована следующим образом:
$scope.deleteConditionClick = function (id) {
deleteCondition($scope.conditions, id);
};
function deleteCondition(conditions, id) {
var conds = conditions;
if (conds) {
for (var i = 0; i < conds.length; i++) {
if (conds[i].type === 'cond') {
if (conds[i].conditionId === id) {
conds.splice(i, 1);
return true;
}
} else if (conds[i].type === 'group') {
deleteCondition(conds[i].conditions, id);
}
}
}
}
Я надеюсь, что это поможет другим с аналогичной проблемой.
Вы не можете получить к нему доступ как cond.conditions.type, cond.conditions.conditionId? –
'$ parent. $ Parent' -' ngInclude' создает * другую * область действия между родительским повторением и повторением вашего ребенка. – tymeJV
'$ parent. $ Parent' дал мне область контроллера, поэтому корень массива снова. –