如何根据“ng-repeat”计数分配“ng-style”指令值

Posted

技术标签:

【中文标题】如何根据“ng-repeat”计数分配“ng-style”指令值【英文标题】:How to assign 'ng-style' directive value based on 'ng-repeat' count 【发布时间】:2017-04-27 21:15:28 【问题描述】:

我有一个 Angularjs 示例 snippet。这里使用 ng-repeat 指令在表格中显示名称,我计划添加 ng-style 指令以根据表格行数向表格添加垂直滚动条。我怎样才能使下面的代码工作?

例如:只有当表格行数超过 4 时,我们才需要垂直滚动条到表格 我试过这样

<div ng-if= "names.length > 4" ng-style="'overflow-y': 'auto'" >
      <table>
        ---------
      </table>
</div>

请帮忙改正代码

这里是示例代码

<!DOCTYPE html>
<html>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script>
<body>

<div ng-app="myApp" ng-controller="customersCtrl"> 
<table>
  <tr ng-repeat="x in names">
    <td> x.Name </td>
    <td> x.Country </td>
  </tr>
</table>
</div> 
</div>

<script>
var app = angular.module('myApp', []);
app.controller('customersCtrl', function($scope, $http) 
    $http.get("http://www.w3schools.com/angular/customers.php")
    .then(function (response) $scope.names = response.data.records;);
);
</script>

</body>
</html>

【问题讨论】:

【参考方案1】:

要选择表格应使用的样式集,您可以使用三元运算符来选择样式集。

<div ng-style="(names.length > 4 ? 'overflow-y': 'scroll' : 'overflow-y': 'auto')" 
     style="height: 50px;">
  <table>
    ...
  </table>
</div>

我建议,如果您的样式变得更加复杂,您应该使用ngClass 指令在满足条件的情况下应用一个类,然后在样式表或style 标记中定义您希望应用的样式。在我看来,这将使代码更易于阅读。

<table ng-class="'scrollable': names.length > 4">
    <tr ng-repeat="x in names">
        <td> x.Name </td>
        <td> x.Country </td>
    </tr>
</table>

<style>
    table  
        overflow-y: auto;
        display: block;
    
    .scrollable 
        overflow-y: scroll;
    
<style>

【讨论】:

【参考方案2】:

使用ngStyle。最好将 (ng-) 样式应用于包含表格的元素。设置 height 属性(例如 100px)。然后 overflow-y 样式将导致超出该阈值的任何内容添加到滚动区域中。

<div ng-style="containerStyle">
   <table>
    <!--table rows-->
   </table>
</div>

请参阅下面的示例。

注意:我将AJAX调用由StackExchange API改为an endpoint,以避免出现CORS问题。

var app = angular.module('myApp', []);
app.controller('customersCtrl', function($scope, $http) 
  $scope.containerStyle = 
    border: '3px solid #f0f0f0',
    'max-height': '100px'
  ;
  $http.get("https://api.stackexchange.com/2.2/users?key=U4DMV*8nvpm3EOpvf69Rxw((&site=***&pagesize=10&order=desc&sort=reputation&filter=default")
    .then(function(response) 
      $scope.names = response.data.items;
      if ($scope.names.length > 4) 
        $scope.containerStyle['overflow-y'] = 'auto'; // max-height: 30px;';
      
    );
);
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="myApp" ng-controller="customersCtrl">

  <div ng-style="containerStyle">
    <table>
      <tr ng-repeat="x in names">
        <td> x.display_name </td>
        <td> x.location </td>
      </tr>
    </table>

  </div>
</div>

【讨论】:

谢谢,为什么要硬编码容器的高度?使用 ng-if 指令是否无法即时检查 ng-repeat 计数? 我这样做是为了演示 overflow-y 属性...您可以随意调整它。

以上是关于如何根据“ng-repeat”计数分配“ng-style”指令值的主要内容,如果未能解决你的问题,请参考以下文章

角度 ng-repeat 元素计数

嵌套 ng-repeat 的 AngularJS 记录计数

Powershell根据给定的计数选择一个随机字母,并动态地将每个字母分配给一个唯一的变量?

AngularJS:从 ng-repeat 动态分配控制器

如何在 ng-repeat 中正确执行函数

用于根据登录计数确定分配用户的主计算机的SQL语句