【发布时间】:2017-03-13 22:16:45
【问题描述】:
我正在开发一个 angularJS 应用程序,该应用程序有一个页面,我使用 ng-repeat 显示大约 30 个项目。每个项目的前面都有一个切换按钮(启用/禁用)。使用我拥有的当前代码,我可以切换这些项目。但问题是如果我向下滚动并切换让我们说项目 25,然后它会自动滚动到页面顶部。如果我现在向下滚动,我可以看到切换确实发生了。
所以现在的要求是确保在点击切换按钮后滚动位置保持不变。
请看下面我的代码。
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();
});
}());
现在的工作原理是,一旦我单击切换按钮,就会启用微调器。同时,控制器将调用itemService.toggleEnabled() 方法,该方法对服务器进行ajax 调用,以更改后端中项目的状态(启用为禁用,反之亦然)。成功更改状态以及 ajax 调用返回时,控制器中将调用 $scope.loadItems() 方法。然后,此方法将执行另一个 ajax 调用以获取项目(现在具有已切换项目的更新状态)。微调器被禁用,然后数据显示在 UI 上。
完成所有这些后,页面将滚动到顶部。当我想切换列表中的某个项目时,这很烦人。
当我单击相应项目的切换按钮而不向上滚动到顶部时,我希望页面出现在相同的位置。
我是 AngularJS 的新手,在这方面的任何帮助都会非常有帮助。
【问题讨论】:
-
我想知道当您重新检索列表时,它是否会调用 $scope.loadItems(..) 如果它清除了缩短页面的列表,导致它在页面较短时向上滚动?
-
我不这么认为。即使是这样,您认为我如何防止它向上滚动?
标签: javascript html angularjs