gpt4 book ai didi

javascript - Angular - 错误 : 10 $digest() iterations reached. 中止

转载 作者:数据小太阳 更新时间:2023-10-29 06:01:30 26 4
gpt4 key购买 nike

我试图在我的 ng-src 路径中放置一个随机整数,就像这样:

<div ng-repeat="user in users">
<img ng-src="{{randomPicture()}}" alt="">
</div>

这是我在 Controller 中的基本功能:

$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 中发现了很多关于此的问题,但我仍然无法摆脱该错误。感谢您的帮助。

最佳答案

你的绑定(bind)是随机的,每次 Angular 执行这个绑定(bind)的观察者时它都会不同。

但是,Angular 只有在达到稳定状态时才会停止摘要循环,此时所有观察者连续两次返回相同的值,而您的情况永远不会发生。

简而言之,您不能在 Angular 绑定(bind)中绑定(bind)随机值或任何始终不同的值。您应该生成一次图片,并根据某些事件选择性地重新随机化它。

$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)}}">

在你的 Controller 中

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 使用 :: 语法(使用相同的代码 randomPicture):

<img ng-src="{{::randomPicture()}}">

关于javascript - Angular - 错误 : 10 $digest() iterations reached. 中止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29277410/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com