【发布时间】:2016-04-08 00:28:24
【问题描述】:
我的 randomWidth() 函数调用两次时遇到问题,即使我从元素中删除了 ng-repeat 属性,它仍然调用了两次。我似乎无法弄清楚如何解决这个问题。我猜有办法解决这个问题,或者显然我会遗漏一些东西?
HTML:
<div id="body-wrapper" ng-app="gallery" ng-controller="mainCtrl">
<section id="sidebar">
<h1>Gallery</h1>
</section>
<main>
<div class="box" ng-repeat="img in imgs" ng-style="{'width': randomWidth()}">
<div class="box-wrapper"></div>
</div>
</main>
</div>
Javascript:
angular.module('gallery', [])
.controller('mainCtrl', function($scope){
$scope.imgs = [
{
title: 'image1'
},
{
title: 'image2'
},
{
title: 'image3'
},
{
title: 'image4'
},
{
title: 'image5'
},
{
title: 'image6'
}
];
$scope.randomWidth = function(){
const widths = ['25%', '33%', '40%', '50%'];
const max = widths.length;
const min = 0;
var r = Math.floor(Math.random() * (max - min)) + min;
console.log(widths[r]);
return widths[r];
}
})
【问题讨论】:
-
什么告诉你它被调用了两次?我没有看到任何明显的迹象表明 randomWidth 被调用了两次。您是否进行了硬刷新?
-
我认为 tt 将在每个摘要循环中调用 - 看看控制台中的错误。
-
正如 Alon 所说,您错误地假设
ng-style只会评估一次randomWidth()。不是这种情况。ng-style将在有理由怀疑结果值可能已更改时重新评估它。如果您希望它们被修复,您应该预先计算随机宽度并将它们分配为$scope上的属性。 -
我得到错误:[$rootScope:infdig] 并且在控制台日志中记录了 12 个宽度,而应该只有 6 个
标签: javascript angularjs ng-style