私はrandomWidth()関数で2回呼び出すことに問題があります。これは、まだ2回呼び出されている要素からng-repeat属性を削除しても発生します。私はこの問題を回避する方法を考え出すことはできません。私はこれを回避する方法があると思っているのでしょうか、明らかに何かを残しているのでしょうか?AngularJSスタイルは2回実行されますか?
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];
}
})
ライブコード:http://codepen.io/daviddiefenderfer/pen/qZpqdK
それが二回呼ばれていますを語っているもの私は、randomWidthが2度呼び出されているという明白な兆候は見ていません。あなたは気分をリフレッシュしましたか? –
私は、各ダイジェストループでttが呼び出されると思います - コンソールのエラーを見てください。 –
Alonは言うとおり、 'ng-style'が' randomWidth() 'を1回だけ評価すると間違っていると思います。これはそうではありません。 'ng-style'は、結果の値が変更された可能性があると思われる理由があるときはいつでも、それを再評価します。ランダムな幅をあらかじめ計算し、それらを修正したい場合は '$ scope'のプロパティとして割り当ててください。 – Oliver