Ich habe eine Liste von eckigen Material-Registerkarten, die mit ng-repeat
erzeugt werden.Verwenden Sie ui-view unter <md-tab-content> Tag
<md-tabs>
<md-tab label="Home" ui-sref="home">
<md-tab-body>
<div ui-view="home"></div>
</md-tab-body>
</md-tab>
<md-tab ng-repeat="cat in categories" label="{{cat.title}}" ui-sref="category({categoryName:cat.title, catID:cat.catID})">
<md-tab-body>
<h3>
{{cat.title}}
</h3>
<div ui-view="categories"></div>
</md-tab-body>
</md-tab>
</md-tabs>
I haben separate Controller vorgesehen für jede der Ansichten in der config
Funktion.
Wenn Sie den Code ausführen, werden Sie beobachten, dass auf der Home
Registerkarte klicken die HomeController
einmal aufgerufen wird, was in Ordnung ist. Wenn Sie jedoch auf eine andere Registerkarte klicken, z. B. Tab1
, wird die CategoriesController
7 Mal aufgerufen, einmal für jede Registerkarte. Dies kann in der Konsole des Entwicklermodus gesehen werden, wo ich einen Text ausgedruckt habe.
Ich verstehe, dass dies als Ergebnis von <div ui-view></div>
, die unter <md-tab-body></md-tab-body>
anwesend ist passiert. Es ruft den Controller für jede Registerkarte auf. Dies bedeutet auch, wenn ich Körper von Tab1
anzeigen möchte, wird es Berechnungen vom Controller 7 mal machen und tatsächlich den Körper jeder Registerkarte mit dem Inhalt Tab1
füllen, obwohl es versteckt werden wird.
Ich möchte nicht, dass dies geschieht. Beim Klicken auf eine Registerkarte muss nur eine Instanz der Steuerung aufgerufen werden und nur der Inhalt dieser Registerkarte muss ausgefüllt werden.
Gibt es einen Weg, dies zu erreichen?
bearbeiten ich unten in der Antwort bearbeitet haben vorgeschlagen, die jsFiddle here die Abhilfe verwenden. Jedoch wird immer noch die CategoriesController
zweimal angerufen. Dies wird zu unnötigen Berechnungen führen. Gibt es einen guten Weg, es zu vermeiden?
Ich dachte an _willBeDestroyed
Eigenschaft zu verwenden, um den Aufruf von Controller zu verhindern. Aber diese Eigenschaft ist nicht in meinen Händen vor dem Aufruf des Controllers.
Jede Hilfe würde sehr geschätzt werden.
Gibt es einen bestimmten Grund, '
' in Registerkarte zu verwenden? Ehrlich gesagt sehe ich keinen Grund, 'ui-router' darin zu verwenden. – varit05Ich möchte einen neuen Controller für die Daten unter jeder Registerkarte instanziieren, so dass ich, wenn eine Registerkarte aktiv ist, keine Sorge über Daten unter anderen Registerkarten haben muss. Es ist ein großes Problem, aufgrund dessen ich in dieser Situation ui-Router verwenden möchte. Ich habe gerade das Problem hier heruntergebrochen. –
Ich habe eine Frage hier gefunden: http://stackoverflow.com/questions/27221222/separate-controller-per-tab-in-angular-material-w-ui-router?rq=1 Der Unterschied zwischen dieser Frage und meinem Frage ist, dass ich mit ng-repeat generiert habe, während in dem anderen Fall gibt es einzelne Registerkarten, die sich um –