首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用ng-重复之后,将注意力集中在特定行上。

使用ng-重复之后,将注意力集中在特定行上。
EN

Stack Overflow用户
提问于 2016-11-02 12:42:10
回答 4查看 1.2K关注 0票数 4

我有一个要求,当使用ng-重复显示项目时,我必须聚焦到特定的行。

让我们说,我有一个包含100个项目的列表,每个项目都有字段,itemId范围从1到100,itemNameisAvailable。这个列表是使用我编写的angularjs服务的ajax调用从服务器获取的。控制器则使用此服务进行ajax调用。当检索响应时,我使用ng-重复在UI上显示这个列表。到目前为止,每件事情都很好,但我想自动聚焦到一个项目,它的itemId值为50,当页面加载时。我想从控制员的角度谈这个。

下面是我目前的代码。

代码语言:javascript
复制
<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

代码语言:javascript
复制
(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。

EN

回答 4

Stack Overflow用户

发布于 2016-11-02 12:47:48

可以这样做:$("#eventTypes").scrollTop(HeightOfItem*(ItemIndex-1))

票数 1
EN

Stack Overflow用户

发布于 2016-11-02 12:57:27

代码语言:javascript
复制
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中

  1. 向每一行添加一个id
  2. 添加指令并将指令的item-id设置为要滚动到的值
代码语言:javascript
复制
<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>
票数 1
EN

Stack Overflow用户

发布于 2016-11-02 13:38:48

代码语言:javascript
复制
// 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);
        })

      }
    }
  }
};
代码语言:javascript
复制
<!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>

$last对于ng-repeat.So中的最后一个元素是正确的,我们将在那里应用一个指令来获取最后一个元素并滚动到it.Hope中,这很有帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40380240

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档