【发布时间】:2016-02-04 16:54:17
【问题描述】:
我正在尝试找到将大型 JSON 对象转换为视图模型的最佳方法。以前,我将模型合并到视图中,这是一种不好的做法。所以,现在我在控制器内部生成了模型。我正在使用 Lodash 作为实用程序库。
我当前的设计计划是将 JSON 对象转换为可在控制器范围内访问的“主”数组。 JSON 文件由 Express 提供。 ModelService 只需获取此文件以使其在控制器中可用。
$scope.arr 是我想在视图中使用的“主”数组。
我还使 JSON 数据可用于在外部链接中查看,因为它是如此之大。 Here it is.
(function() {
'use strict';
angular
.module('app')
.controller('ModelController', ModelController);
function ModelController($scope, ModelService, _) {
$scope.jsonData = ModelService.getAll();
$scope.getData = function() {
$scope.jsonData.$promise.then(function(data) {
$scope.all = data;
$scope.arr = [];
_.mapValues($scope.all.parent1.clusters, function(cluster) {
$scope.arr.push(cluster.name);
_.mapValues(cluster.subclusters, function(subcluster) {
$scope.arr.push(subcluster.name);
_.mapValues(subcluster.entities, function(entity) {
// map entities
})
});
});
});
};
$scope.getData();
}
})();
此代码只是将 cluster 和 subcluster 名称添加到数组中。我希望将子集群映射到它们的父集群。我这样做的想法是将每个cluster 元素转换为它自己的数组,然后添加子集群,然后将每个子集群转换为一个数组,以便将实体映射到它们。这似乎乏味且效率低下。所以,我正在寻找一种更好的方法来实现这一目标。
如果我可以一举将每个集群对象添加到数组中,而无需所有映射并将对象转换为数组,那就太好了。这可能吗?
线框视图看起来像this。 Flex Cluster Title 是subcluster 的名称,其中的每个数字都是一个entity。
【问题讨论】:
-
这确实不是一个 Angular 问题,而是一个 lodash 问题。另外,
flexCluster是什么?应该是subcluster? -
是的,我刚刚编辑了它。我认为使用
_.values可以实现我想要的,但我想在不使用链式语法(即arr.cluster.subcluster.entity)的情况下引用视图中的嵌套数据。
标签: javascript arrays angularjs json lodash