Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/461.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 OrderBy和渐进加载AngularJS_Javascript_Angularjs_Angularjs Ng Repeat_Angularjs Orderby - Fatal编程技术网

Javascript OrderBy和渐进加载AngularJS

Javascript OrderBy和渐进加载AngularJS,javascript,angularjs,angularjs-ng-repeat,angularjs-orderby,Javascript,Angularjs,Angularjs Ng Repeat,Angularjs Orderby,当我在ng repeat中使用orderBy时遇到了一个问题,该命令带有一个自动递增的limito。当页面加载几个元素时,该指令停止工作并停止增加元素限制 这是html: <div class="row" id="main"> <div class="col-xs-12 col-sm-6 col-md-3 col-lg-2 block animate" ng-if="!errorDialogActive" ng

当我在ng repeat中使用orderBy时遇到了一个问题,该命令带有一个自动递增的limito。当页面加载几个元素时,该指令停止工作并停止增加元素限制

这是html:

<div class="row" id="main">
        <div class="col-xs-12 col-sm-6 col-md-3 col-lg-2 block animate"
             ng-if="!errorDialogActive"
             ng-repeat="build in builds.builds.build | limitTo:totalDisplayed | orderBy:'lastBuildDetails.startDate' : true track by build._id"
             ng-class="{'running': project.running ,'block-green': build._status ==='SUCCESS','block-red': build._status==='FAILURE'}"
             id="{{build._id}}"
             progressive-loading>
            <div class="title-container animate" ><p>{{build._buildTypeId}}</p></div>
            <div class="update-container animate col-xs-12">
            <time class="time">{{build.buildDate | date : 'dd.MM.yyyy H:mm:s'}} </time>
            </div>
        </div>
    </div>
最后是loadMore函数

    $scope.loadMore = function () {
        if ($scope.totalDisplayed >= $scope.size) {
            console.log('no more builds : ' + $scope.totalDisplayed);
            $scope.loaded=true;
        } else {
            $scope.totalDisplayed += 2;
            console.log('More : ' + $scope.totalDisplayed);
            $scope.totalDisplayedPercentage = (($scope.totalDisplayed*100)/$scope.size);
            console.log('Percentage : ' + $scope.totalDisplayedPercentage);
        }
    };

对不起,我的英语不好,如果您不懂我的意思或需要更多信息,请告诉我。

您的指令链接函数只调用一个新的呈现元素,因此当
orderBy
起作用时,新的呈现元素可以放在中间和特殊属性
范围内。$last
当然将为false,所以不要开始超时

为了解决您的问题,可以模拟计数器,例如:
注意:这是一个最简单的示例,可能只有在页面上有一个示例时才能正常工作

app.directive('progressiveLoading', ['$timeout', function ($timeout) { 
    var counter=1;
    return function (scope) { 
        if (counter == scope.displayStep) { 
            counter = 1;
            $timeout(function () { 
                console.log('Im the last Displayed, Loading more'); 
                scope.loadMore(); 
            }, 500); 
        }else{
            counter += 1;
        }
    }; 
}]);
非常简单的示例:

//代码在这里
var-app=angular.module('app',[]);
app.directive('progressiveLoading',['$timeout',
函数($timeout){
var计数器=1;
返回函数(范围){
if(计数器==范围.显示步骤){
计数器=1;
$timeout(函数(){
log('Im是最后显示的,正在加载更多');
scope.loadMore();
}, 500);
}否则{
计数器+=1;
}
};
}
]);
app.controller('ctrl',['$scope',
职能($范围){
$scope.totalDisplayed=2;
$scope.displayStep=2;
$scope.loaded=false;
$scope.build=[{
_id:1,
_状态:“成功”,
最新资料:{
起始日期:1
},
_buildTypeId:1
}, {
_id:2,
_状态:“成功”,
最新资料:{
开始日期:10
},
_buildTypeId:2
}, {
_id:3,
_状态:“成功”,
最新资料:{
开始日期:9
},
_buildTypeId:3
}, {
_id:4,
_状态:“成功”,
最新资料:{
开始日期:8
},
_buildTypeId:4
}, {
_id:5,
_状态:“成功”,
最新资料:{
开始日期:7
},
_buildTypeId:5
}, {
_id:6,
_状态:“成功”,
最新资料:{
开始日期:6
},
_buildTypeId:6
}, {
_id:7,
_状态:“成功”,
最新资料:{
开始日期:5
},
_buildTypeId:7
}, {
_id:8,
_状态:“成功”,
最新资料:{
开始日期:4
},
_buildTypeId:8
}, {
_id:9,
_状态:“成功”,
最新资料:{
开始日期:3
},
_buildTypeId:9
}, {
_id:10,
_状态:“成功”,
最新资料:{
开始日期:2
},
_buildTypeId:10
}];
$scope.size=$scope.build.length;
$scope.totalDisplayedPercentage=($scope.totalDisplayed*100)/$scope.size);
$scope.loadMore=函数(){
log('loadMore',$scope.totaldisplated,$scope.size);
如果($scope.totalDisplayed>=$scope.size){
log('不再生成:'+$scope.totalDisplayed);
$scope.loaded=true;
}否则{
$scope.totalDisplayed+=$scope.displayStep;
log('More:'+$scope.totalDisplayed);
$scope.totalDisplayedPercentage=($scope.totalDisplayed*100)/$scope.size);
log('Percentage:'+$scope.totalDisplayedPercentage);
}
};
}
])

{{totalDisplayedPercentage}}}%
{{build.\u buildTypeId}


你能提供或吗?我试过了,但我不能让plunker工作,因为有太多的外部依赖,我可以展示它是如何工作的,如果有必要,我可以添加提供代码:(请尝试仅使用OP中的代码和Plunkers的示例数据这是我的问题的演示视频,再次为无法提供Plunkerry而感到抱歉。请完美地查看consoleWorks中的错误,谢谢,并为花这么长时间回答而感到抱歉。@Vistor它没有完成解决方案,只是一个示例,您应该对它进行测试。正如我上面所说的-它可能不工作或不可用。)在某些情况下,我知道错误,但我在我的应用程序中测试它,没有问题,它在所有情况下都很好。@ Vistor,所以很高兴帮助你:-你学会使用Pasker-GR8解决方案,但不能实现它吗?
app.directive('progressiveLoading', ['$timeout', function ($timeout) { 
    var counter=1;
    return function (scope) { 
        if (counter == scope.displayStep) { 
            counter = 1;
            $timeout(function () { 
                console.log('Im the last Displayed, Loading more'); 
                scope.loadMore(); 
            }, 500); 
        }else{
            counter += 1;
        }
    }; 
}]);