由于动态 JSON 更改,正在更新 AngularJS ng-repeat table

Updating AngularJS ng-repeat table due to dynamic JSON changes

我想显示每只动物的最后 activity 状态,而 activity 状态和动物可能会随时间变化。

首先我得到这个JSON:

$scope.JSON = [
{"Animal" : "Horse", "Status" : "awake", "LastUpdate" : { "$date" : 1473248184519 }},
{"Animal" : "Rabbit", "Status" : "awake", "LastUpdate" : { "$date" : 1473248194240  }},
{"Animal" : "Rabbit", "Status" : "eating", "LastUpdate" : { "$date" : 1473249639255  }},
{"Animal" : "Horse", "Status" : "eating", "LastUpdate" : { "$date" : 1473249652549  }},
{"Animal" : "Horse", "Status" : "sleeping", "LastUpdate" : { "$date" : 1473249656338  }}
]

如果动物正在做一些新的事情,JSON 会自动更改,f.e。兔子现在正在睡觉,就像出现新动物一样,f.e。一头牛:

$scope.JSON = [
{"Animal" : "Horse", "Status" : "awake", "LastUpdate" : { "$date" : 1473248184519 }},
{"Animal" : "Rabbit", "Status" : "awake", "LastUpdate" : { "$date" : 1473248194240  }},
{"Animal" : "Rabbit", "Status" : "eating", "LastUpdate" : { "$date" : 1473249639255  }},
{"Animal" : "Horse", "Status" : "eating", "LastUpdate" : { "$date" : 1473249652549  }},
{"Animal" : "Horse", "Status" : "sleeping", "LastUpdate" : { "$date" : 1473249656338  }},
{"Animal" : "Rabbit", "Status" : "sleeping", "LastUpdate" : { "$date" : 1473249659505  }},
{"Animal" : "Cow", "Status" : "awake", "LastUpdate" : { "$date" : 1473249659505  }};
]

这个 JSON 会随着时间的推移而扩展,因此我只想显示 table 中不同动物的最后一个值,如下所示:

动物Table例子:

主要问题 是,随着时间的推移,新动物会添加到 jSON 中,应该自动检测并添加到 table 中。

我想到了两个解决方案:

1, ng-repeat + filter + limitTo

对于此尝试,请查看此 Plunker https://plnkr.co/edit/ftea6vd1qaPZaXGusZAN

除了自动检测新动物,这几乎为我提供了一切,有什么建议

2,为每个动物创建子集 JSONs

我会创建一个新的 JSON 子集,其中只包含一只动物,并在这个新的 JSON 上重复 ng(使用 lastitem)。通过遍历所有动物(如何获得所有动物?也许作为 foreach 列表?)我可以获得每只动物的每个最后状态?

这样更好,甚至可能吗?

我会创建一个方法来向 ng-repeat 提供数据,而不是直接传递 JSON ng-repeat="roll in filtering(JSON)

在那个函数上会创建类似这样的东西:

function filtering(animals){
    var temp = [].concat(animals);
    var animalsExisting = []; // To keep track of animals already added
    return temp.reverse().filter(function(animal){
      var notAdded = animalsExisting.indexOf(animal.Animal) === -1;
      if(notAdded) animalsExisting.push(animal.Animal);
      return notAdded;
    });
}

所以会反转数组,因此它从最后添加的开始并过滤它们,只添加最后一个(因为它被反转了)。

希望对您有所帮助