使用下拉列表过滤 ng 重复,而不复制下拉选项
Filter ng-repeat with dropdown without duplicating the dropdown options
同样,我可以在ng-repeat
中手动执行filter: { category : 'Popular'}
,我希望能够对下拉列表执行相同的操作。
我能够使基础知识发挥作用。我有两个问题:我不希望类别在下拉列表中重复自己,我希望当我在下拉列表中选择"流行"时能够看到分类为"流行"的所有内容。
这是我的 HTML:
<div ng-controller="SuperCtrl" class="row">
<ul class="small-12 medium-12 columns">
<select ng-model="find" ng-options="entry.category for entry in parsedEntries"><option value="">Select Category</option></select>.
<li ng-repeat="entry in parsedEntries | filter: find">
<strong>{{ entry.title }} </strong><br>
{{ entry.description }}
</li>
</ul></div>
这是控制器:
app.controller('SuperCtrl', ['$scope', '$http', function($scope,$http) {
var url = 'https://spreadsheets.google.com/feeds/list/1lZWwacSVxTD_ciOsuNsrzeMTNAl0Dj8SOrbaMqPKM7U/od6/public/values?alt=json'
var parse = function(entry) {
var category = entry['gsx$category']['$t'];
var description = entry['gsx$description']['$t'];
var title = entry['gsx$title']['$t'];
return {
category: category,
description: description,
title: title
};
}
$http.get(url)
.success(function(response) {
var entries = response['feed']['entry'];
$scope.parsedEntries = [];
for (key in entries) {
var content = entries[key];
$scope.parsedEntries.push(parse(content));
}
});
}]);
让它按照你想要的方式工作:
<select ng-model="find" ng-options="entry.category as entry.category for entry in parsedEntries | unique: 'category'">
unique
滤波器来自角度滤波器。它需要将'angular.filter'
添加到模块依赖项中:
var app = angular.module('myApp', ['angular.filter']);
见小提琴
注意:本身不是问题,但我从<ul>
元素中取出了<select>
元素。
只需将唯一类别放入名为 categories
的字符串数组中,对数组进行排序,并用 ng-options
显示它:
<select ng-model="find" ng-options="category as category for category in categories"><option value="">Select Category</option></select>.
在解析函数之后将其附加到代码中,并删除您拥有的$http.get
。这将定义一个contains
函数,并在对象返回的同时构建数组:
function contains(a, obj) {
for (var i = 0; i < a.length; i++) {
if (a[i] === obj) {
return true;
}
}
return false;
};
$http.get(url)
.success(function(response) {
var entries = response['feed']['entry'];
$scope.parsedEntries = [];
$scope.categories = [];
for (key in entries) {
var content = entries[key];
var obj = parse(content);
$scope.parsedEntries.push(obj);
if (!contains($scope.categories, obj.category))
{
$scope.categories.push(obj.category);
}
}
$scope.categories.sort();
})
相关文章:
- 使用Clipboard.js复制span文本
- ZeroClipboard-在复制之前添加到值
- Google Script HtmlService,通过多个选项卡复制URL变量
- 使用下拉列表过滤 ng 重复,而不复制下拉选项
- 选择2 已将复制选项选中到禁用字段
- 在 JQuery 中,如何将选择选项的子集从一个选择菜单复制到另一个选择菜单
- Microsoft Dynamics Online:将所有选项集项目复制到多行文本字段(使用 JavaScript)
- IE9、IE11和Safari的“复制到剪贴板”选项
- 如何实现浏览器选项卡的复制
- Chrome扩展复制当前的URL和打开选项卡来执行操作
- 下拉值在nog选项中复制
- 更新CKeditor,现在复制/剪切上下文菜单选项消失了.我怎样才能把它们找回来
- 如何复制和粘贴文本从一个选项卡到另一个javascript (chrome扩展)
- 如何使用javascript将表单列表中的选项值复制到输入字段
- 在window.showModalDialog中启用复制粘贴选项
- 无法复制一个下拉选项到另一个
- 试图创建一个chrome扩展,将从浏览器选项卡a复制数据,并填写在浏览器选项卡B上的表单
- JQuery移动复制选择的选项到其他下拉菜单点击
- 使用JavaScript创建和复制选择/选项列表菜单
- Javascript 复制文本选择显示值的选项值,但我需要描述