Parameter an Angular ng-include übergeben
Ich versuche, die Anzeige einer binären Struktur von Elementen, die ich durch gehen rekursiv mit ng-include.
Was ist der Unterschied zwischen ng-init="item = item.left"
und ng-repeat="item in item.left"
?
In diesem Beispiel verhält es sich genau das gleiche, aber ich benutze ähnlichen code in einem Projekt und da verhält es sich anders. Ich nehme an, es ist, weil der Winkel-Bereiche.
Vielleicht sollte ich nicht verwenden, ng-if, bitte erklären Sie mir, wie Sie es besser machen.
Den pane.html ist:
<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>
Controller ist:
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);
}
});
BEARBEITEN:
Zuerst hatte ich das problem, dass die Direktive ng-repeat hat eine größere Priorität als die ng-if. Ich habe versucht, Sie zu kombinieren, die fehlgeschlagen. IMO ist es seltsam, dass die ng-repeat dominiert ng-if.
InformationsquelleAutor der Frage Johannes | 2014-08-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Brauchen Sie nicht. alle
ng-include
's Quellen haben den gleichen controller. Also jeder Sicht sieht die gleichen Daten.[Eins]
ng-init="item = item.left"
bedeutet - wir schaffen neue Instanz mit dem Namen Element, das entsprichtitem.left
. In anderen Worten: Sie erreichen das gleiche, indem controller:[2]
ng-repeat="item in item.left"
bedeutet die Erstellung einer Liste der Bereiche auf der Grundlageitem.left
array. Sie sollten wissen, dass jedes Element inng-repeat
hat seinen privaten BereichIch gepostet in der Vergangenheit zu beantworten, wie die Anzeige-Struktur mithilfe
ng-include
.Es vielleicht hilfreich: wie-tun-display-zusammenklappbar-Baum
Der größte Teil hier, die Sie erstellen Knoten mit
id
umhüllt von<scipt>
tag und verwendenng-repeat
:InformationsquelleAutor der Antwort Maxim Shoustin
Es ist ein wenig hacky, aber ich bin mir übergeben von Variablen an eine ng-include mit ng-repeat, der ein array mit JSON-Objekt :
In die include-Seite haben Sie Zugriff auf Ihre Variablen wie diese:
InformationsquelleAutor der Antwort Junus Ergin
Machen Sie eine generische Richtlinie anstelle von ng-include ist eine sauberere Lösung:
Winkel-vorbei an Umfang zu ng-include
InformationsquelleAutor der Antwort 665