Я пытаюсь отобразить двоичное дерево элементов, которое я рекурсивно просматриваю с помощью ng-include.Параметр прохождения в Angular ng-include
В чем разница между ng-init="item = item.left"
и ng-repeat="item in item.left"
? В этом примере он ведет себя точно так же, но я использую аналогичный код в проекте и там он ведет себя по-другому. Полагаю, это из-за угловых областей. Может быть, я не должен использовать ng-if, пожалуйста, объясните мне, как это сделать лучше.
pane.html является:
<div ng-if="!isArray(item.left)">
<div ng-repeat="item in [item.left]" ng-include="'Views/pane.html'">
</div>
</div>
<div ng-if="isArray(item.left)">
{{item.left[0]}}
</div>
<div ng-if="!isArray(item.right)">
<div ng-repeat="item in [item.right]" ng-include="'Views/pane.html'">
</div>
</div>
<div ng-if="isArray(item.right)">
{{item.right[0]}}
</div>
<div ng-if="!isArray(item.left)">
<div ng-init = "item = item.left" ng-include="'Views/pane.html'">
</div>
</div>
<div ng-if="isArray(item.left)">
{{item.left[0]}}
</div>
<div ng-if="!isArray(item.right)">
<div ng-init="item = item.right" ng-include="'Views/pane.html'">
</div>
</div>
<div ng-if="isArray(item.right)">
{{item.right[0]}}
</div>
Контроллер:
var app = angular.module('mycontrollers', []);
app.controller('MainCtrl', function ($scope) {
$scope.tree = {
left: {
left: ["leftleft"],
right: {
left: ["leftrightleft"],
right: ["leftrightright"]
}
},
right: {
left: ["rightleft"],
right: ["rightright"]
}
};
$scope.isArray = function (item) {
return Array.isArray(item);
}
});
EDIT: Сначала я столкнуться с проблемой, что директива нг-повтора имеет больший приоритет, чем ng- если. Я попытался объединить их, что не удалось. ИМО странно, что ng-repeat доминирует над ng-if.
Решение состоит в создании новой директивы, так как я сказал, в этом ответе: http://stackoverflow.com/a/36916276/2516399 – smartmouse