javascript - AngularJS - 强制渲染/重新渲染/编译一个 ng-repeated div inside 指令

标签 javascript angularjs

我有一个使用 ng-repeat 的 div。

我从数组中的几个项目开始。

我想在渲染下一个项目之前强制渲染第一个项目。这样做的原因是因为每个div对高度的依赖

有办法吗?

<div class='listOne'>
    <div ng-repeat='item in listOne'>{{item}}</div>
</div>
<div class='listTwo'>
    <div ng-repeat='item in listTwo'>{{item}}</div>
</div>

JS

var myList = ['something', 'stuff', 'someOtherthing'];
var listOne = [];
var listTwo = [];

// decide which list to insert into
function decideListBasedOnHeight() { // returns array
    var listOneElement = // reference to listOne element
    var listTwoElement = // reference to listTwo element
    if (listOneElement.offsetHeight > listTwoElement.offsetHeight ) // the height here is zero for both
       return listTwo;
    return listOne;
}

forEach (myList, function(value) {
    decideBasedOnHeight().push(value);
});

问题示例:http://plnkr.co/edit/XxJTzNlnQrB7S7tQ0PBL?p=preview 第二个例子:http://plnkr.co/edit/3pzpsgmQ0vIM1e6nuEQG?p=preview

最佳答案

嗯,问得好。

你不能 forEach 一个数组,而是通过指令一步一步地推送它。见

<div ng-contoller="ctrl">
    <div class='listOne'>
        <div ng-repeat='item in listOne' count-height-and-push-next="listOneHeight">{{item}}</div>
    </div>
    <div class='listTwo'>
        <div ng-repeat='item in listTwo' count-height-and-push-next="listTwoHeight">{{item}}</div>
    </div>
</div>

.directive('countHeightAndPushNext', function(){
   return{
       restrict: 'A',
       scope: true,
       link: function(scope, element, attrs){
           scope[attrs.countHeightAndPushNext] += element[0].outerHeigth;
           scope.pushItem();
       }
   };

})

.controller('ctrl', function($scope){
    $scope.myList = ['something', 'stuff', 'someOtherthing'];
    $scope.listOne = [];
    $scope.listOneHeight = 0;
    $scope.listTwo = [];
    $scope.listTwoHeight = 0;

    var nextPushIndex = 0;
    $scope.pushItem = function(){
        if($scope.listOneHeight > $scope.listTwoHeight){
             $scope.listTwo.push($scope.myList[nextPushIndex])
        }else{
             $scope.listOne.push($scope.myList[nextPushIndex]);
        }
        nextPushIndex++;
    };
    $scope.pushItem();
});

我真的不喜欢这个例子中的紧耦合,它绝对需要重构和重新制作,但这只是一个想法。可能不是最好的,但它应该有效。干杯。

关于javascript - AngularJS - 强制渲染/重新渲染/编译一个 ng-repeated div inside 指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24518253/

相关文章:

javascript - 当代码位于 &lt;script&gt; 标记或 .js 文件中时,性能是否存在差异?

javascript - 是否可以独立运行jquery/javascript脚本?

javascript - React - 如何映射嵌套对象值?

angularjs - ng-repeat 索引到数组

javascript - 更改 Angular 模板时执行 jQuery 语句时出现问题

AngularJS $http.post(..) - 错误 : $http is not defined

jquery - MaterializeCSS 动态添加自动完成字段

javascript - 如何循环来自生成器的 JavaScript 迭代器?

javascript - 将 csv 数据放入 highcharts

javascript - 如何在javascript文件中添加区域,visual studio