我正在尝试显示一个元素的二叉树,我使用 ng-include 递归地遍历它。
ng-init="item = item.left"
和 和有什么不一样ng-repeat="item in item.left"
?在此示例中,它的行为完全相同,但我在项目中使用了类似的代码,并且它的行为不同。我想这是因为 Angular 范围。也许我不应该使用 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);
}
});
编辑:首先我遇到了指令 ng-repeat 比 ng-if 具有更高优先级的问题。我试图将它们结合起来,但失败了。IMO 奇怪的是 ng-repeat 支配 ng-if。