gpt4 book ai didi

javascript - angularjs - 动态函数返回

转载 作者:行者123 更新时间:2023-11-28 20:02:43 25 4
gpt4 key购买 nike

index.html

<div ng-repeat="object in objects" ng-style="getStyle(object.id)"></div>

Controller .js

[...]

$scope.startWidth = 100;

$scope.getObject = [...]

$scope.getStyle = function(id) {
var widthVal = $scope.startWidth;
$scope.StartWidth += $scope.getObject(id).value;
return { width : widthVal }
}

[...]

此代码运行到无限 $digest 循环。我想我知道为什么。返回值不应该是动态的。但如果没有循环我怎样才能实现这一点呢?我想显示不同宽度的对象。对象的宽度取决于前一个对象的值。

最佳答案

问题在于 ng-style 在每个子作用域上放置一个 $watchExpression

$watchExpression 必须幂等,这意味着它必须通过多次检查返回相同的结果。
如果$watchExpression仍然脏,另一个$digest将会被触发。

更新

在看到GRaAL不错的答案后,我想出了更好的解决方案:

这是一个演示插件:http://plnkr.co/edit/oPrTiwTOyCR3khs2iVga?p=preview

Controller :

$scope.$watchCollection('objects', function calculateWidths() {
var tempWidth = 0;
for( var i = 0; i < $scope.objects.length; i++) {
tempWidth += $scope.objects[i].value;
$scope.objects[i].width = tempWidth + 'px';
}
});

标记:

<div ng-repeat="object in objects" ng-style="{width: object.width}">

旧解决方案

这是一个骗子:http://plnkr.co/edit/CqxOmV5lpZSLKxqT4yqo?p=preview

关于javascript - angularjs - 动态函数返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21387225/

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