使用ng repeat后,将注意力集中在特定的一行上
Focus on a particular row after using ng-repeat
我有一个要求,当使用ng repeat显示项目时,我必须关注特定的行
假设我有一个100个项目的列表,每个项目都有字段,itemId
从1到100,itemName
和isAvailable
。这个列表是使用我编写的angularjs服务的ajax调用从服务器获取的。控制器反过来使用此服务进行ajax调用。当检索到响应时,我将使用ng repeat在UI上显示此列表。到目前为止一切都很好,但我想在加载页面时自动关注itemId
值为50的项目。我想从控制器端对此进行处理
下面是我目前拥有的代码。
HTML
<div id="eventTypes" class="panel-body">
<div ng-repeat="item in items" class="panel-body">
<div class="row">
<div class="col-md-9">{{item.itemId)}}</div>
<div class="col-md-9">{{item.itemName)}}</div>
<div class="col-md-9">{{item.isAvailable)}}</div>
</div>
</div>
</div>
JS
(function () {
'use strict';
angular.module('myApp').controller('itemsController', function ($scope, itemsService) {
var serviceError = function (errorMsg) {
console.log(errorMsg);
};
$scope.items = [];
$scope.loaditems = function () {
itemsService.getitems().then(function (response) {
$scope.items = response.data;
}, serviceError);
};
$scope.loaditems();
});
}());
上面的代码运行良好。它正在UI上显示项目。但是,我想在加载页面时自动聚焦(滚动(到项目编号50。
可以这样做:$("#eventTypes").scrollTop(HeightOfItem*(ItemIndex-1))
查看您的评论和问题,您是否可以在上一页中选择时添加一个类。然后,当你进入下一页时,在你的控制器中,你可以做这样的事情:
angular.element('className').focus();
myApp.directive('scrollOnLoad', function() {
return {
restrict: 'A',
scope:{itemId: '='}
link: function(scope) {
body.on('load', function() {
var el = $('#'+ scope.itemID);
$("body").animate({scrollTop: el.offset().top}, "slow");
});
}
}
});
以及在您的HTML 中
- 向每一行添加一个
id
- 添加指令并将指令的
item-id
设置为要滚动到的值
<div id="eventTypes" class="panel-body">
<div ng-repeat="item in items" class="panel-body" scroll-on-load item-id="50">
<div class="row" id="{{item.itemId}}">
<div class="col-md-9">{{item.itemId)}}</div>
<div class="col-md-9">{{item.itemName)}}</div>
<div class="col-md-9">{{item.isAvailable)}}</div>
</div>
</div>
</div>
// Code goes here
angular
.module('myApp', [])
.run(function($rootScope) {
$rootScope.title = 'myTest Page';
})
.controller('testController', ['$scope', function($scope) {
$scope.items = [];
for (var i = 0; i < 101; i++) {
$scope.items.push({
name: 'nikhil00' + i,
id: i,
})
}
}]).directive('scrollto', scrollto);
scrollto.$inject = ['$timeout'];
function scrollto($timeout) {
return {
scope: {
scrollto: "=scrollto",
},
link: function(scope, element) {
if (scope.scrollto) {
$timeout(function() {
window.scrollTo(0, element[0].offsetTop);
})
}
}
}
};
<!DOCTYPE html>
<html data-ng-app="myApp">
<head>
<link rel="stylesheet" href="style.css">
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.8/angular.min.js"></script>
<script src="script.js"></script>
</head>
<body data-ng-controller="testController">
<div ng-repeat="item in items">
<label ng-bind="item.name" scrollto="$last"></label>
</div>
</body>
</html>
对于ng-repeat
中的最后一个元素,$last
将为true。因此,我们正在那里应用一个指令来获取最后一个图元并滚动到其中。希望它能有所帮助。
相关文章:
- ng init中的表达式无法使用ng repeat
- 拆分文本以每隔n个字符添加一行新行,并注意空格
- 动态插入的表:JQuery未检测到最后一行
- 在终端中运行 JavaScript 时(使用 rhino),如何使用 print() 函数在一行中打印
- 如何在Angular UI网格中选择下一行
- 通过单击动态加载的表中同一行的另一个字段来更新一行的字段
- Angular ng repeat order将多个字段作为一个字段
- 访问ng repeat中的第一个项目
- Angular js+ng repeat+字母数字索引不起作用
- 如何正确应用Angularjs ng repeat
- AngularJS Navigation (li ng-repeat, create header li), DOM
- Jquery幻灯片以一行左侧的图像开始,但我希望它从右端开始
- 从重复的javascript数组结果集中只获取一行
- 在GridView中,当单击复选框时,在网格的同一行中使用JavaScript将标签中的值添加到TextBox
- html5画布在同一行中写入多个字体
- 当列数为 4 时,我如何务实地让 ng-repeat 添加另一行
- 如何使用ng repeat以缩略图格式创建一行中有n个项目的m个项目的列表
- 使用ng repeat后,将注意力集中在特定的一行上
- 在ng-repeat中突出显示一行的更有效方法?. .角的方式
- 如果表的行是由 ng-repeat 从一个方法的返回中创建的,那么如何通过另一个方法调用来设置其中一行