ng-repeat为每一行设置一个随机颜色

时间:2015-11-19 13:35:20

标签: javascript css angularjs random

我正在尝试从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}">&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"
    }];

}]);

1 个答案:

答案 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,我可能只是看看他们的来源,看看他们是怎么做的,我不确定。