我试图在我的ng-src路径中放置一个随机整数,如下所示:
<div ng-repeat="user in users">
<img ng-src="{{randomPicture()}}" alt="">
</div>
这是我控制器中的基本功能:
$scope.randomPicture = function(){
var PATH = 'assets/images/';
var image = Math.floor((Math.random() * 12) + 1);
var ext = '.jpg';
var randomPic = PATH + image + ext;
return randomPic;
};
显示图像,但在控制台中出现此错误:
Error: [$rootScope:infdig] 10 $digest() iterations reached. Aborting!
我在stackoverflow中发现了很多问题,但我仍然无法摆脱这个错误。谢谢你的帮助。
答案 0 :(得分:8)
你的绑定是随机的,每当Angular执行这个绑定的观察者时它就会不同。
但是,当Angular达到一个稳定状态时,Angular只会停止一个摘要周期,在这个状态中,所有观察者连续两次返回相同的值,这种情况从未发生过。
简而言之,您不能在Angular绑定中绑定随机值或任何总是不同的值。您应该生成一次图片,并根据某些事件选择重新随机化。
$scope.randomPicture = generateRandomPicture();
和
<img ng-src="{{randomPicture}}">
更新:例如,如果您想每3秒刷新一次图片,可以添加
// Generate a new random picture every 3 seconds
$interval(function() {
$scope.randomPicture = generateRandomPicture();
}, 3000);
更新2 现在,我更了解您的问题,我建议保持原样,但如果至少使用Angular 1.3,请使用::
,如下所示。这样,您将为每个用户生成一个随机图片,但只生成一次。
在Angular的早期版本中,或者您可以为每个用户生成一个感觉随机的确定性图像。例如,在您的HTML使用中:
<img ng-src="{{randomPicture($index)}}">
在您的控制器中
var rand1 = Math.round(Math.random()*10);
var rand2 = Math.round(Math.random()*10);
$scope.randomPicture = function(index) {
var PATH = 'assets/images/';
var image = (index+rand1*rand2)%13 + 1;
var ext = '.jpg';
var randomPic = PATH + image + ext;
return randomPic;
};
<小时/> 请注意,如果您正在使用Angular 1.3+并且只想生成一次图片,则可以使用
::
语法使用 ont-time binding (使用相同的代码进行{ {1}}):
randomPicture