当前位置: 首页 > 面试题库 >

在angularjs中显示汇总列表

金骞尧
2023-03-14
问题内容

在我的模型中,我的数据类似于:

$scope.list = [{id:0,tags:['tag1','tag2']},{id:2,tags:['tag2']}};

我想显示带有复选框的标签列表(包含’tag1’和’tag2’的唯一值)。希望是这样的:

<div ng-repeat="tag in list.tags">
    <label class="checkbox">
        <input type="checkbox" ng-model="filter.tag" />
        {{tag}}
    </label>
</div>

如果我对列表进行硬编码,我知道如何根据检查的内容过滤主列表,但是不知道如何自动生成唯一标签列表。


问题答案:

您正在寻找执行三个操作:

  • 从中的每个项目获取标签数组 $scope.list
  • 将它们展平为单个阵列
  • 从此数组获取唯一值

您可以使用纯JavaScript来做到这一点,但是为了使事情变得更容易,我建议您使用Underscore(一个使您可以访问许多用于处理和检查数组,对象等的函数的库)。

让我们从下面的代码开始:

$scope.list = [
  {id: 0, tags: ['tag1', 'tag2']},
  {id: 1, tags: ['tag2']},
  {id: 2, tags: ['tag1', 'tag3', 'tag4']},
  {id: 3, tags: ['tag3', 'tag4']}
];

现在,让我们执行第一个操作:从中的tags属性为每个对象获取数组$scope.list。Underscore提供了pluck我们所需要的方法。

采摘 _.pluck(list, propertyName)

地图的最常见用例的便捷版本:提取属性值列表。

使用pluck,我们可以获得以下信息:

var tags = _.pluck($scope.list, 'tags');
// gives us [['tag1', 'tag2'], ['tag2'], ['tag1', 'tag3', 'tag4'], ['tag3', 'tag4']]

现在,我们要展平该数组。

展平 _.flatten(array, [shallow])

展平嵌套数组(嵌套可以达到任何深度)。如果通过浅层,则阵列将仅展平一个级别。

tags = _.flatten(tags);
// gives us ['tag1', 'tag2', 'tag2', 'tag1', 'tag3', 'tag4', 'tag3', 'tag4']

最后,您只需要每个标签的一个实例。

uniq _.uniq(array, [isSorted], [iterator])别名:unique

生成数组的无重复版本,使用===来测试对象是否相等。如果您事先知道该数组已排序,则为isSorted传递true将运行更快的算法。如果要基于转换计算唯一项,请传递迭代器函数。

tags = _.unique(tags)
// gives us ['tag1', 'tag2', 'tag3', 'tag4']

我们可以将它们与Underscore的有用chain方法结合在一起,以将它们链接在一起。让我们在返回唯一标记的范围内创建一个函数:

$scope.uniqueTags = function() {
  return _.chain($scope.list)
    .pluck('tags')
    .flatten()
    .unique()
    .value();
};

由于这是一个函数,因此无论我们在$scope.list事后添加还是删除项,它都将始终返回唯一标签。

现在,您可以使用ng-repeaton uniqueTags显示每个标签:

<div ng-repeat="tag in uniqueTags()">
  <label class="checkbox">
    <input type="checkbox" ng-model="filter.tag" />
    {{tag}}
  </label>
</div>

这是演示此技术的有效jsFiddle:http :
//jsfiddle.net/BinaryMuse/cqTKG/



 类似资料:
  • 本文向大家介绍Angularjs基础知识及示例汇总,包括了Angularjs基础知识及示例汇总的使用技巧和注意事项,需要的朋友参考一下 angularjs是google开发的一款高大上的前端mvc开发框架。 Angularjs官网:https://angularjs.org/ 官网有demo,访问可能需要FQ Angularjs中国社区:http://www.angularjs.cn/ 适合初学者

  • 我做了一个Jmeter测试,并添加了汇总报告作为测试结果的监听器,但它并没有显示给我“90%行”colmun。

  • 这是我在尝试从数据库中检索所有主题时得到的错误。我错过了什么? Whitelabel错误页面此应用程序没有/Error的显式映射,因此您将其视为一种后退。 学科类

  • 我正在使用智能表显示记录。使用自定义分页显示每页20条记录。 我想显示分页,如:25条记录中的1-20条我如何才能做到这一点我尝试使用(页数*总页数),但这将使结果更加接近。

  • 问题内容: 这是我的代码,我需要对列表中未定义数量的元素求和。这该怎么做? 我的输入: 输入后,我通过删除第一个元素。在列表之后,我需要对列表中的所有元素求和。 在这种情况下,总和为18。请注意,未定义元素数。 问题答案: 您可以使用内置的sum()来对列表中的数字求和: 它将汇总所有数量的项目。例: 对于您的具体情况 : 对于您的数据,首先将数字转换为数字,然后将数字求和: 这将适用于列表中 未

  • 问题内容: 以下面的DataFrame为例, 生成一个新列的简单方法是什么?该列包含某一列中的某些数据聚集? 例如,如果我总结了 我怎样才能得到 问题答案: