【问题标题】:Generate same random number each time when controller loaded每次加载控制器时生成相同的随机数
【发布时间】:2015-05-20 20:11:26
【问题描述】:

我有 Icon 和一个 scope.id ,我每次都使用 Icon 分配不同的颜色代码。 假设

angular.module('myAppp').controller('myCtrl',function(){
    scope.id=[0,1,2,3];
    //generate random number
    $scope.Icon=[];
    for(i=0;i<scope.id.length;i++) {
        var ran= Math.floor( Math.random()*255)+$scope.id[i];
        $scope.Icon.push(ran);
    }   
});

HTML

<div ng-repeat='id in id'>
    <span style="background-color:rgb({{$scope.Icon[$index]}},255,255)">{{id}}</span>
</div>

所以我希望当我再次重新加载页面时,它应该再次获得相同的颜色,但现在由于 Math.random() 而返回不同的颜色

请给我建议或指导,因为我是新手。

【问题讨论】:

  • 将组合存储在localstorage中,只有在localstorage中找不到该值时才调用该函数
  • 本地存储将在单机上,如果用户更改机器它会再次生成不同的数字。 ???
  • 那么你应该在一些服务器端实现中存储东西。在你的服务器上有一个用户偏好表,存储所有这些细节。

标签: javascript html css angularjs


【解决方案1】:

您可以使用cookies 来存储当前值。

每次加载页面检查是否有以前存储的 cookie,如果没有,则分配一个随机值并将其存储在 cookie 中。 p>

每次改变颜色,都必须给cookie赋值,所以每次用户加载或重新加载页面时,如果已经有值,就将颜色设置为cookie中的那个。

这是一个关于如何在 angularjs 中使用 cookie 的示例:
http://www.tutorialsavvy.com/2014/11/angularjs-cookie-example.html/

【讨论】:

  • 如果用户下次使用不同的机器怎么办??
  • @ShubhamNigam 这样您就应该将颜色存储在服务器端(数据库)中。您需要考虑成本/收益,因为该操作要繁重得多,每次用户更改颜色时,您都需要将其发送到您的服务器,并存储它。
  • Toni ,你是绝对正确的,但服务器端存储对我的场景来说是个问题,因为我的应用程序在客户端应用程序中,我使用谷歌驱动器进行存储。你可以帮助我这 .. 我如何在每次页面加载时发现随机值相同,但问题是 .. 它没有以更高的亮度生成颜色.. 小提琴:- fiddle.jshell.net/xopddsxp/3
【解决方案2】:

实现选择随机数生成算法的初始种子;用户不能选择或重置它

来自JavaScript reference

使用预先生成的数字数组。

【讨论】:

    【解决方案3】:

    这是页面加载时动态颜色变化的示例:http://fiddle.jshell.net/xopddsxp/

    HTML:

    <div ng-app="myAppp" ng-controller="myCtrl">
        <div ng-repeat='id in id'>
            <span style="background-color:rgb({{Icon[$index]}},{{Icon[$index +1]}},{{Icon[$index + 2]}})">{{id}}</span>
        </div>
    </div>
    

    JS:

    var app = angular.module("myAppp", []).controller('myCtrl',function($scope, $http){
         $scope.id = [0,1,2,3]; //generate random number
         $scope.Icon=[];
         for(i=0; i < $scope.id.length; i++){  
           var ran= Math.floor( Math.random()*255)+$scope.id[i];
           $scope.Icon.push(ran);
         }  
    });
    

    【讨论】:

    • 感谢您的提琴,但在重新加载页面上,它会生成不同的颜色,我希望每次页面加载时都使用相同的颜色。
    • 如果你查看其他答案,我也提到了同样的事情。顺便说一句,如果用户在其他机器上操作呢?
    • 您是否检查了另一个链接,您可以在其中存储值是 Web DB。如果用户在其他机器上操作,那么你必须在服务器端管理这些值。
    • 感谢您的宝贵回复,但问题是我只想在客户端机器上执行此操作。因为我一直在寻找它。我已经达到了一些我想分享的里程碑,我希望你会喜欢它。小提琴:-jsfiddle.net/zFbfE/29 我没有将它作为答案发布,因为它不包含完全不同的对比色。如果您可以改进这一点,请分享并感谢
    • 你的问题我不清楚。请改进您的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-27
    • 2021-03-01
    • 2020-12-20
    • 1970-01-01
    • 2014-05-07
    • 2013-12-10
    相关资源
    最近更新 更多