javascript - 在每第二个 <li> 之后添加 <ul></ul> 并使用 Angular ngRepeat

标签 javascript angularjs

我有一个 ul 并且我在 li 上应用了 ngRepeart 但我想在每 2 个 li 之后创建一个新的 ul像这样。
这可能吗?

<ul>
  <li>simth</li>
  <li>aryan</li>
</ul>
<ul>
  <li>john</li>
  <li>mark</li>
</ul>
<ul>
  <li>cooper</li>
  <li>lee</li>
</ul>

这是我的 angular.js 代码

function myCrtl($scope){
  $scope.nameList= [{
      name:'simth'
    },{
      name:'aryan'
    },{
      name:'john'
    },{
      name:'mark'
    },{
      name:'cooper'
    },{
      name:'lee'
    }]
}

最佳答案

AngularJS 中的编程接近于“数据驱动开发”。您的数据不反射(reflect)您想要获得的 HTML 结构,因此更难实现,但并非不可能。我的第一个建议解决方案是更改数据的结构。如果那不是一种选择,请继续阅读。

const myApp = angular.module('myApp',[]);

myApp.controller('MyCtrl', $scope => {
    $scope.nameList = [
        [{name: 'simth'}, {name: 'aryan'}],
        [{name: 'john'}, {name: 'mark'}],
        [{name: 'cooper'}, {name: 'lee'}]
    ];
    
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.3/angular.min.js"></script>
<div ng-app="myApp">
<div ng-controller="MyCtrl">
    <ul ng-repeat="group in nameList">
        <li ng-repeat="person in group">{{person.name}}</li>
    </ul>
</div>
</div>

备选

如果您无法更改数据结构,您仍然可以这样做。实现一些辅助函数或过滤器:

const myApp = angular.module('myApp',[]);

myApp.controller('MyCtrl', $scope => {
    $scope.nameList = [
        {name: 'simth'},
        {name: 'aryan'},
        {name: 'john'},
        {name: 'mark'},
        {name: 'cooper'},
        {name: 'lee'}
    ];
});

myApp.filter('getGroup', () => (array, number) => {
    return array.reduce((prev, next, index) => {
        if (index % number === 0) {  // start a new group
            prev.push([next]);
        } else {
            prev[prev.length - 1].push(next);  // add to existing group
        }
        return prev;
    }, []);
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.3/angular.min.js"></script>
<div ng-app="myApp">
<div ng-controller="MyCtrl">
    <ul ng-repeat="group in nameList | getGroup:2">
        <li ng-repeat="person in group">{{person.name}}</li>
    </ul>
</div>
</div>

过滤器的作用是:获取数组并将其分成许多数组,每个数组有 2 个元素(这是一个参数,因此您可以稍后重用它)。

关于javascript - 在每第二个 <li> 之后添加 <ul></ul> 并使用 Angular ngRepeat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27013260/

相关文章:

angularjs - 在过滤器中添加 ng-click 事件

javascript - 如何将文本转换为 Angular 格式的 json 以及如何循环数组

javascript - 当服务中存在嵌套的 promise 关系时,AngularJS 表现异常

javascript - 正则表达式 : Remove quotation marks from json list

javascript - new Date() 从无效输入字符串中生成有效日期

javascript - jQuery 动画方法不起作用

javascript - 指令在 ionicModal 中首先遵守,甚至在 Controller 加载之前

javascript - Canvas 中的事件

javascript - PDF.js 在打印时插入空白页

angularjs - 使用 $http-backend 测试 Angular 时为单个请求定义多个响应