【问题标题】:Updating AngularJS ng-repeat table due to dynamic JSON changes由于动态 JSON 更改而更新 AngularJS ng-repeat 表
【发布时间】:2016-09-13 10:51:20
【问题描述】:

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

首先我得到这个 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.一头牛:

$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 会随着时间的推移而扩展,因此我只想在表格中显示不同动物的最后一个值,如下所示:

动物表示例:

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

我想到了两个解决方案:

1、ng-repeat + filter + limitTo

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

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

2,为每只动物创建子集 JSON

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

这是否更好,甚至可能?

【问题讨论】:

    标签: angularjs json ng-repeat


    【解决方案1】:

    我会创建一个方法来向 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;
        });
    }
    

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

    希望对你有帮助

    【讨论】:

    • 我尝试了很多方法,但我仍然有问题,你能编辑我的 plunker 吗?我认为我的主要问题是动物、动物和动物变量的多样性。
    • @Martin,检查这是否可行,进行了 1 处更改。 plnkr.co/edit/OQVjB47bpS9fKubO2lum
    猜你喜欢
    • 1970-01-01
    • 2017-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-26
    • 2016-08-16
    • 2015-01-11
    • 2018-06-24
    相关资源
    最近更新 更多