Ich arbeite an einer angularJS-Anwendung mit einer Seite, auf der ich ungefähr 30 Elemente mit ng-repeat anzeigen kann. Vor jedem Objekt befindet sich eine Umschalttaste (aktiviert/deaktiviert). Mit dem aktuellen Code, den ich habe, kann ich diese Elemente umschalten. Aber das Problem ist, wenn ich scrolle nach unten und umschalten lässt sagen Artikel 25, dann scrollt es automatisch zum oberen Rand der Seite. Wenn ich jetzt nach unten scrolle, kann ich sehen, dass der Wechsel tatsächlich stattgefunden hat.
Jetzt müssen Sie sicherstellen, dass die Bildlaufposition beibehalten wird, nachdem auf die Schaltfläche geklickt wurde.Scroll-Position beibehalten, wenn eine Schaltfläche umgeschaltet wird
Bitte siehe unten den Code, den ich habe.
HTML
<div id="eventTypes" class="panel-body">
<div ng-if="!spinner" ng-repeat="item in items" class="panel-body">
<div class="row">
<div class="col-md-9">{{item.itemName)}}</div>
<div class="col-md-3">
<input id="toggleEnabled"
type="button"
ng-class="{'btn-primary': item.enabled}"
value="{{item.enabled ? 'enabled' : 'disabled'}}"
ng-click="toggleEnabled(item)">
</div>
</div>
</div>
<div ng-if="spinner" class="spinner">
<div class="spinner-container container1">
<div class="circle1"></div>
<div class="circle2"></div>
<div class="circle3"></div>
<div class="circle4"></div>
</div>
<div class="spinner-container container2">
<div class="circle1"></div>
<div class="circle2"></div>
<div class="circle3"></div>
<div class="circle4"></div>
</div>
<div class="spinner-container container3">
<div class="circle1"></div>
<div class="circle2"></div>
<div class="circle3"></div>
<div class="circle4"></div>
</div>
</div>
</div>
JS
(function() {
'use strict';
angular.module('myApp').controller('itemsController', function ($scope, itemsService) {
var serviceError = function (errorMsg) {
console.log(errorMsg);
$scope.turnOffSpinner();
};
$scope.items = [];
$scope.item = {};
$scope.spinner = true;
$scope.toggleEnabled = function (item) {
$scope.turnOnSpinner();
itemsService.toggleEnabled(item)
.then(function() {
$scope.loaditems();
});
};
$scope.loaditems = function() {
itemsService.getitems().then(function (response) {
$scope.items = response.data;
}, serviceError);
$scope.turnOffSpinner();
};
$scope.turnOnSpinner = function() {
$scope.spinner = true;
};
$scope.turnOffSpinner = function() {
$scope.spinner = false;
};
$scope.loaditems();
});
}());
Wie das jetzt funktioniert, sobald ich auf den Schalter klicken, wird ein Spinner aktiviert. In der Zwischenzeit wird der Controller die itemService.toggleEnabled()
Methode aufrufen, die einen Ajax-Aufruf an den Server ausführt, um einfach den Status des Elements (aktiviert zu deaktiviert oder umgekehrt) im Backend zu ändern. Bei erfolgreicher Statusänderung und wenn der Ajax-Aufruf zurückkommt, wird im Controller die Methode $scope.loadItems()
aufgerufen. Diese Methode führt dann einen weiteren Ajax-Aufruf aus, um die Elemente abzurufen (jetzt mit dem aktualisierten Status des Elements, das umgeschaltet wurde). Der Spinner ist deaktiviert und die Daten werden dann auf der Benutzeroberfläche angezeigt. Wenn das alles erledigt ist, wird die Seite nach oben gescrollt. Dies ist ärgerlich, wenn ich ein Objekt in der Liste umschalten möchte. Ich möchte, dass die Seite an der gleichen Position angezeigt wird, wenn ich auf die Umschaltfläche des entsprechenden Elements klickte und nicht nach oben scrollte.
Ich bin neu in AngularJS und jede Hilfe in dieser Hinsicht wäre wirklich hilfreich.
ich frage mich, ob, wenn Sie die Liste erneut abrufen, ruft es $ scope.loadItems (..), wenn er die Liste löscht die Seite zu kürzen, damit sie nach oben scrollt, wenn die Seite kürzer ist? –
Ich glaube nicht, dass es so passiert. Auch wenn es so ist, wie könnte ich verhindern, dass es nach oben scrollt? –