Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.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 基于limito-angularjs的重排序_Javascript_Angularjs_Angularjs Ng Repeat_Render - Fatal编程技术网

Javascript 基于limito-angularjs的重排序

Javascript 基于limito-angularjs的重排序,javascript,angularjs,angularjs-ng-repeat,render,Javascript,Angularjs,Angularjs Ng Repeat,Render,因此,我有一个由ng repeat指令输出的列表,上面有filter|limito:amount 金额变量根据用户屏幕大小而变化。它正在正确更改,但在更新变量时列表不会重新呈现 在amount可变更改后,如何强制它重新渲染 HTML JS(控制员) var屏幕宽度; var trackListNumber=函数(){ screenWidth=$window.innerWidth; 如果(屏幕宽度

因此,我有一个由
ng repeat
指令输出的列表,上面有filter
|limito:amount

金额
变量根据用户屏幕大小而变化。它正在正确更改,但在更新变量时列表不会重新呈现

amount
可变更改后,如何强制它重新渲染

HTML

  • JS(控制员)

    var屏幕宽度;
    var trackListNumber=函数(){
    screenWidth=$window.innerWidth;
    如果(屏幕宽度<1599){
    控制台日志(屏幕宽度);
    $scope.amount=18;
    }否则{
    $scope.amount=27;
    }
    };
    trackListNumber();
    angular.element($window.bind('resize',function(){
    trackListNumber();
    });
    
    编辑

    我把代码改为

    var screenWidth;
    
    var trackIconsNumber = $scope.$apply(function() {
        screenWidth = $window.innerWidth;
        if (screenWidth < 1599) {
            console.log(screenWidth);
            $scope.iconsAmount = 18;
        } else {
            $scope.iconsAmount = 9;
        }
    });
    
    trackIconsNumber();
    
    angular.element($window).bind('resize', function () {
        trackIconsNumber();
    });
    
    var屏幕宽度;
    var trackIconsNumber=$scope.$apply(函数(){
    screenWidth=$window.innerWidth;
    如果(屏幕宽度<1599){
    控制台日志(屏幕宽度);
    $scope.iconsaunt=18;
    }否则{
    $scope.iconsAmount=9;
    }
    });
    trackiconnumber();
    angular.element($window.bind('resize',function(){
    trackiconnumber();
    });
    
    这会导致以下错误:

    angular.js:14642错误:[$rootScope:inprog]$digest已在进行中

    正如评论中所说,您应该使用$scope.$apply。实施应该是这样的:

    长版本

    angular.element($window).bind('resize', function() {
      $scope.$apply(function() {
        trackListNumber();
      });
    });
    
    angular.element($window).bind('resize', function() {
      $scope.$apply(trackListNumber());
    });
    
    短版

    angular.element($window).bind('resize', function() {
      $scope.$apply(function() {
        trackListNumber();
      });
    });
    
    angular.element($window).bind('resize', function() {
      $scope.$apply(trackListNumber());
    });
    

    试试
    $scope.$apply(trackListNumber)
    我应该在哪里添加它?我尝试而不是
    trackListNumber()在resize函数中和外部,这会导致以下错误:
    错误:[$rootScope:inprog]$digest已在进行中
    。按如下方式包装:
    $scope.$apply(函数(){trackListNumber();})我添加了新的编辑代码,但仍然不起作用。请看一看。将绑定到
    $window
    的函数包装起来,然后删除trackiconnumber();重新加载页面后执行,因为它导致了我在编辑中提到的另一个错误。我的意思是重新加载后功能应该以正常方式执行,并使用$apply调整大小。从另一方面来说,这是行不通的。