Я сделал рекурсивный элемент ng-repeat, и попытка манипулировать вещами превратилась в кошмар, потому что у меня нет ссылки на родителя, который я повторяю.
ng-repeat выглядит следующим образом:
ng-repeat="(key, value) in value"
Помните, что он рекурсивный, поэтому каждое значение в значении становится новым значением, поэтому я не могу просто использовать значение "in" из ng-repeat. Я хочу делать такие вещи, как проверка, является ли родитель массив, но $parent - это нечто странное, а не родительский элемент текущего значения итерации.
Некоторые примеры того, что я хочу сделать, это:
ng-show="isArray(parent)"
ng-click="delete(parent, $index)"
(в качестве примера того, что я делаю как работа, мне пришлось добавить свойство ___ISARRAYELEMENT___ для каждого из моих элементов массива, просто чтобы узнать, что это в массиве > . > ;;)
EDIT: В основном я хочу знать, есть ли какие-либо удобные метаданные в контексте ng-repeat, который мне не хватает.
EDIT: Хорошо, вот html целиком:
<html ng-app>
<head>
<title>JSON CRUD</title>
<link href="//netdna.bootstrapcdn.com/bootstrap/3.0.3/css/bootstrap.min.css" rel="stylesheet">
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script src="//netdna.bootstrapcdn.com/bootstrap/3.0.3/js/bootstrap.min.js"></script>
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.6/angular.min.js"></script>
<script src="angularjsoncrud.js"></script>
<script type="text/ng-template" id="node.html">
<button ng-click="minimized = !minimized" ng-show="!isLeaf(value)" ng-init="minimized=false" ng-class="{'glyphicon glyphicon-plus': minimized, 'glyphicon glyphicon-minus': !minimized}">-</button>
<input ng-model="value.___KEY___" ng-if="!isArrayElement(value)" />
<input ng-if="isLeaf(value)" ng-model="value.___VALUE___" />
<ul ng-if="!isLeaf(value)" ng-show="!minimized">
<li ng-repeat="(key,value) in value" ng-if="key != '___KEY___' && key != '___ISARRAY___'" ng-include="'node.html'"></li>
<button type="button" ng-if="isArray(value)" ng-click="addToArray(value)">Add Element</button>
</ul>
</script>
</head>
<body ng-app="Application" ng-controller="jsoncrudctrl">
<ul>
<li ng-repeat="(key,value) in json" ng-include="'node.html'"></li>
</ul>
<pre>{{stringify(json)}}</pre>
</body>
</html>
Одна вещь, которую я хотел бы сделать, это заменить isArrayElement (значение) на isArray (parent), потому что isArrayElement опирается на метаданные, которые я добавил в массив, которые я бы предпочёл не добавлять.