Javascript 更改ng repeat angular中单个项目的值

Javascript 更改ng repeat angular中单个项目的值,javascript,angularjs,loops,ng-repeat,Javascript,Angularjs,Loops,Ng Repeat,我对Angularjs非常陌生…我想在这里寻找更多的理论帮助,然后是确切的代码。我正在制作一个游戏,当你进入一个新的游戏地图时,它会加载游戏地图数据和“敌人”,它们是包含敌人所有属性的对象。敌人的属性相同,但价值观不同- 输入屏幕-此代码基本上初始化了新地图- db.getThisMapHovers($scope.area).success(function(data){ $scope.maphovers = data; $scope.room_url = data[0].room_ur

我对Angularjs非常陌生…我想在这里寻找更多的理论帮助,然后是确切的代码。我正在制作一个游戏,当你进入一个新的游戏地图时,它会加载游戏地图数据和“敌人”,它们是包含敌人所有属性的对象。敌人的属性相同,但价值观不同-

输入屏幕-此代码基本上初始化了新地图-

db.getThisMapHovers($scope.area).success(function(data){
  $scope.maphovers = data;
  $scope.room_url = data[0].room_url;
  var random_num = Math.random();
  random_num = random_num.toString();
  random_num = random_num.substring(3,2);
  var calculated_num = data[0].encounter_chance;
  if(random_num >= calculated_num){
     db.getNpcCombat(data[0].npc_combat_set).success(function(data){
       $scope.encounters = [];
      $scope.encounters = data;
       $scope.encounters.attack_count = 0; 
      $scope.the_encounter(data);
    });
  }
});
它加载地图并做一个随机数(模拟掷骰子),如果通过,它会将“遭遇”的敌人加载到这个HTML中

<div class="col-md-6">
    <div ng-repeat="encounter in encounters" class="col-md-4" ng-class="{'move_forward' : number == 100}">
        <img class="animated tada col-md-12" style="width:100px" src="{{encounter.combat_npc_img}}">
    <p>{{encounters.attack_count}}</p>
        <div class="progress">
            <div class="progress-bar" role="progressbar" aria-valuenow="0"
  aria-valuemin="0" aria-valuemax="100" ng-model="attack" style="width: {{encounters.attack_count}}%">
    {{encounters.attack_count}}%
            </div>
        </div>
    </div>
</div>
攻击函数(最终,我将让它为每个“敌人”随机选择一种“攻击”类型,使代码运行,然后在0处通过进度计数器重新开始

我再次创建了一个随机数,以造成时间上的随机延迟,在进度条返回到0并重新启动攻击过程之前,每个“敌人”的时间不同

$scope.attack = function(data){
    angular.forEach(data, function(value, key) {
       var random_num = Math.random();
       random_num = random_num.toString();
       random_num = random_num.substring(2,7);
       $timeout(function(){
         $scope.encounters.attack_count = 0;  
         $scope.the_encounter(data);
  }, random_num);
});
}
我遇到的问题是,所有敌人的进度条都是完全相同的……我认为我使用的foreach循环会对每个项目产生不同的影响,但它似乎给出了相同的值


如果有人能向我解释如何在ng repeat中为不同的项目添加不同的计时器,以及如何在循环中针对单个项目,那就太好了。

我不知道我是否理解正确,但我根据您的来源制作了一个示例:

基本上,您使用的是一个全局$scope变量($scope.conferences.attack\u count),并在html中引用该变量(style=“width:{{conferences.attack\u count}%”>{{conferences.attack\u count}%)。我认为您必须在每个遭遇对象中设置attack\u count变量

在“遭遇”函数中,设置每个遭遇对象的攻击计数变量:

$scope.the_encounter = function(data){
   angular.forEach(data, function(value, key) {
      var set_timer = $interval(function() {
      value.attack_count += 1; //set the attack_count in the 'value' object, not in the $scope
      if(value.attack_count == 100){
         $interval.cancel(set_timer);
    }
  }, value.attack_rate); 
});
在html标记中,您引用了conference.attack\u count变量:

    <div class="progress-bar" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" ng-model="attack" style="width: {{encounter.attack_count}}%">
    {{encounter.attack_count}}%
    </div>

{{遭遇.攻击{u计数}}%

请注意,您引用的变量是Conferences.attack\u count,我改为Conference.attack\u count。

我不确定,因为我没有尝试过这段代码,但我看到循环在间隔中使用相同的数字。为什么不在循环本身内部创建一些随机性呢?
$scope.Conferences.attack\u count+=not\one_but_random;
注意-当我打印出“敌人”对象时,在敌人对象之外只有1个攻击计数…我试图在编程中创建它。我添加了一个“攻击计数”数据库中每个敌人的行,现在在每个对象的内部。尝试以这种方式操作它。问题是,间隔对每个项目都起着相同的作用…我希望不同项目有不同的速度间隔。-},value.attack\u rate);你到底在这里存储了什么($scope.Conferences=data;),因为后来你在$scope.Conferences.attack\u count中添加了+1…我有点困惑,因为在你附加数组
值之前。攻击率
此时似乎来自服务器:
db.getNpcCombat(数据[0].npc\u战斗集)。成功(函数(数据){$scope.the_遭遇(数据)
。如果你能制作一个JSFIDLE,任何人都可以更容易回答,在这个过程中,你甚至可以自己找到它。太好了!是的,请注意,我以错误的方式更改了攻击计数。谢谢!唯一的问题是,尽管不确定为什么,似乎在攻击函数中,它们都在同一时间重新启动进程ime…我想为每个项目的超时设置一个随机的时间段随机的时间段…你看到它会在相同的时间内不断重置它们的原因了吗?发布一个JSFIDLE,在我的示例中,进程不会重新启动。但这可能是一个类似的原因(一个全局变量而不是“局部”变量)
    <div class="progress-bar" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" ng-model="attack" style="width: {{encounter.attack_count}}%">
    {{encounter.attack_count}}%
    </div>