Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript angular.js过滤器中的嵌套列表_Javascript_Angularjs - Fatal编程技术网

Javascript angular.js过滤器中的嵌套列表

Javascript angular.js过滤器中的嵌套列表,javascript,angularjs,Javascript,Angularjs,我正在尝试为angular创建一个简单的分页过滤器,如下所示: <ul> <li ng-repeat="page in items | paginate: 10"> <ul> <li ng-repeat="item in page">{{ item }}</li> </ul> </li> </ul> 你能告诉我: 为什么嵌套列表

我正在尝试为angular创建一个简单的分页过滤器,如下所示:

<ul>
    <li ng-repeat="page in items | paginate: 10">
        <ul>
           <li ng-repeat="item in page">{{ item }}</li>
        </ul>
    </li>
</ul>
你能告诉我:

  • 为什么嵌套列表对角度过滤器是个问题
  • 在哪里可以阅读文档中的相关内容
  • 如何最终以正确的方式编写过滤器
您可以在此plunker中看到所有代码: 运行代码后,打开控制台,您将看到错误消息


谢谢你

我不能帮你回答第一个问题,但我可以为你的问题提供解决方案

我有一个类似的问题,我想每两个元素打开和关闭一个元素,我用这样的东西修复了它:

angular.module('app.filters', [])
    .filter('paginate', function() {
        return function(input, perPage) {
            return [[1,2,3],[4,5,6]];
        };
    });
myApp.filter('paginate', ['$cacheFactory', function($cacheFactory) {
    var arrayCache = $cacheFactory('paginate');
    return function(array, size) {
        if (!array) {
            return false;
        }
        var newArray = [];
        for (var i = 0; i < array.length; i++) {
            newArray.push(array.slice(i, i + size));
        }
        var arrayString = JSON.stringify(array),
            cachedParts = arrayCache.get(arrayString + size);
        if (JSON.stringify(cachedParts) === JSON.stringify(newArray)) {
            return cachedParts;
        }
        arrayCache.put(arrayString + size, newArray);
        return newArray;
    };
}]);
myApp.filter('paginate',['$cacheFactory',函数($cacheFactory){
var arrayCache=$cacheFactory('paginate');
返回函数(数组、大小){
if(!数组){
返回false;
}
var newArray=[];
对于(var i=0;i
使用此过滤器的方式正是如何将其放入模板中,并在每个页面上传递所需的元素数

关于你的第二个问题:关于Angular,我拥有的最好的资源是和上的所有视频

我还被告知,《使用AngularJS掌握Web应用程序开发》一书也是一本很好的资源。

我已经向angular团队介绍了这一点,他们说这是预期的行为:

这是预期的行为。模型无法稳定,因为您是 每次更改分页数组的标识

最好不要对此使用过滤器,而是使用更多的过滤器 控制器中的$scope.$watch的功能


这样的事情不能通过过滤器来完成,您必须在控制器中执行分页,而不是使用过滤器。

谢谢,但您能解释一下它为什么工作吗?看起来唯一的区别是缓存结果。您甚至可以在实际计算后进行此操作。下面详细解释了其工作原理:
myApp.filter('paginate', ['$cacheFactory', function($cacheFactory) {
    var arrayCache = $cacheFactory('paginate');
    return function(array, size) {
        if (!array) {
            return false;
        }
        var newArray = [];
        for (var i = 0; i < array.length; i++) {
            newArray.push(array.slice(i, i + size));
        }
        var arrayString = JSON.stringify(array),
            cachedParts = arrayCache.get(arrayString + size);
        if (JSON.stringify(cachedParts) === JSON.stringify(newArray)) {
            return cachedParts;
        }
        arrayCache.put(arrayString + size, newArray);
        return newArray;
    };
}]);