ng重复为每一行设置一个随机颜色

ng-repeat set a random color for each row

本文关键字:设置 颜色 随机 一个 一行 ng      更新时间:2023-09-26

我试图从ng重复中每个元素的数组中设置一个随机背景色。这是我做的一把简单的小提琴:

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}">&nbsp; {{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"
    }];
}]);

您的颜色列表已经在范围内,为什么不根据$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,我可能会看看他们的来源,看看他们是怎么做的,我不确定。