javascript - transclude - Angular JS-NG-Repeat mit Filtern und groupBy




angularjs transclude (2)

Es kann einfacher sein, die Filterung auf die Ebene der li-Elemente anzuwenden, anstatt sie auf Gruppenebene durchzuführen

<div ng-app="myApp">
        <div ng-controller='TestGroupingCtlr'>
            <div ng-repeat="item in MyList | groupBy:'groupfield' " >
                <h2 ng-show="item.groupfield_CHANGED">{{item.groupfield}}</h2>
                <ul >
                    <li ng-show="item.status=='Closed' || item.groupfield=='Today' ">{{item.whatever}} - Status: {{item.status}}</li>
                </ul>
            </div>

        </div>

</div>

Ich baue ein Dashboard zur Anzeige von Ogoing- und Closed-Problemen. Ich habe alles mit angulars ng-repeat mit Filtern und nach Datum gruppiert. Hier ist eine kurze Auswahl von dem, was ich bisher bekommen habe:

<div ng-app="myApp">
        <div ng-controller='TestGroupingCtlr'>
            <div ng-repeat="item in MyList | filter: {status: 'Closed'} | groupBy:'groupfield' " >
                <h2 ng-show="item.groupfield_CHANGED">{{item.groupfield}}</h2>
                <ul>
                    <li>{{item.whatever}} - Status: {{item.status}}</li>
                </ul>
            </div>
        </div>
</div>

Heres mein Bereich Array:

$scope.MyList = [
    {groupfield: 'Day Before', whatever: 'Server X down', status: 'Open'},
    {groupfield: 'Yesterday', whatever: 'Access issues', status: 'Open'},
    {groupfield: 'Yesterday', whatever: 'Server Z is down', status: 'Closed'},
    {groupfield: 'Today', whatever: 'Network problem', status: 'Closed'},
    {groupfield: 'Today', whatever: 'Network is down', status: 'Closed'}
];

Beispiel meiner JSfiddle: http://jsfiddle.net/R8YZh/6/

Mein Problem ist, dass ich Fälle immer noch öffnen muss, um nur unter Today's Gruppe zu zeigen. Jetzt könnte ich technisch einfach eine neue ng-Wiederholung erstellen, um nur offene Ausgaben anzuzeigen und diese direkt unter meiner ersten Liste zu verstecken. Aber da ich eine sehr große Vorlage mit vielen Details habe, möchte ich 2 Vorlagen vermeiden.

Würde jemand wissen, ob es eine Möglichkeit gibt, einfach die existierende Ng-Wiederholung zu verwenden und zu sagen, dass alle Open-Probleme am Ende des Indexarrays angezeigt werden, so dass es sich irgendwie in der Today-Gruppe befindet? Jede Hilfe wird geschätzt.

Dies ist, was ich wünschte, würde anzeigen:

Yesterday

Server Z is down - Status: Closed

Today

Network problem - Status: Closed
Network is down - Status: Closed
Server X down - Status: Open
Access isses - Status: Open

Wenn Sie filter aufrufen, wie in der Dokumentation "Das Endergebnis ist ein Array der Elemente, für die das Prädikat true zurückgegeben hat.", Dh es enthält keine Elemente mit dem Status "Öffnen".

Das bedeutet, dass Sie eine weitere ng-Wiederholung durchführen sollten, um diejenigen zu zeigen, die "offen" sind. Es wird wahrscheinlich die Leistung nicht zu sehr beeinträchtigen, aber wenn Sie die Dinge schnell und übersichtlich halten wollen, sollten Sie die Paginierung verwenden. Sie können auch Ihren eigenen benutzerdefinierten Filter erstellen, wenn Sie wirklich keine andere ng-repeat oder paginate verwenden möchten.





angularjs-scope