要素のバイナリ ツリーを表示しようとしていますが、これは 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 を支配するのは奇妙です。