我正在尝试从ng-repeat中的每个元素中的数组中设置随机背景颜色。这是一个简单的小提琴:
http://jsfiddle.net/akbb6car/2/
正如你所看到的,我的问题是我不能在每个“行”中设置颜色,但它在所有行中设置相同。我无法理解如何解决这个问题。我也试过使用id="$index"
但不行。这是一些代码:
<div ng-app="myApp" ng-controller="dummy">
<div ng-repeat="customer in customerData" class="col-sm-3">
<div ng-init="getRandomColor()" class="contact-box" ng-style="{background: bgColor}"> {{customer.name}} got: {{customer.color}}</div>
</div>
</div>
angular.module('myApp', ['ngSanitize'])
.controller('dummy', ['$scope', function ($scope) {
$scope.doc_classes_colors = [
"#339E42",
"#039BE5",
"#EF6C00",
"#A1887F",
"#607D8B",
"#039BE5",
"#009688",
"#536DFE",
"#AB47BC",
"#E53935",
"#3F51B5"
];
$scope.bgColor = "#339E42";
$scope.getRandomColor = function () {
$scope.bgColor = $scope.doc_classes_colors[Math.floor(Math.random() * $scope.doc_classes_colors.length)];
};
$scope.customerData = [{
name: "Mike"
}, {
name: "Tom"
}, {
name: "ASD"
}, {
name: "Lol"
}];
}]);
答案 0 :(得分:3)
您的颜色列表已在范围内,为什么不根据$ index从中选择一种新颜色?
<div class="contact-box" ng-style="{background: doc_classes_colors[$index % doc_classes_colors.length]}">
http://jsfiddle.net/akbb6car/6/
我使用的是$index % doc_classes_colors.length
而不是$index
,因此如果行数多于颜色,则会重复颜色。
如果你愿意引入对 lodash 的依赖,那么有一个方便的_.shuffle
方法来随机化列表的顺序,这将使颜色的顺序随机化页面加载。颜色将以相同的顺序重复,但每次页面加载会以不同的顺序排列颜色列表。
http://jsfiddle.net/akbb6car/8/
如果你不想引进lodash,我可能只是看看他们的来源,看看他们是怎么做的,我不确定。