【发布时间】:2014-10-23 07:12:10
【问题描述】:
我正在尝试显示一个元素的二叉树,我使用 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。
【问题讨论】:
-
一个解决方案是创建一个新指令,正如我在这个答案中所说:stackoverflow.com/a/36916276/2516399
标签: javascript angularjs angularjs-ng-repeat angularjs-ng-include angularjs-ng-init