具有唯一性的 ng-options 不起作用
ng-options with unique does not work
我有以下汽车数组。我正在尝试在此数组上使用 ng-options 仅将颜色类别显示为 link 以及 "all colors" 选项。
全部,红黄蓝
<div ng-repeat="client in clients">
<label>{{client.Name}}</label>
<select ng-model="opt" ng-options="i.color for i in client.cars | unique: 'color'">
<option value="">All</option>
<option value="">{{i.color}}</option>
</select>
</div>
如果我删除“| unique: 'color'”语法,那么我会得到所有重复的颜色。
如果我在语法中保留“|unique:color”,则会收到以下错误:angular.js:13424 错误:[$injector:unpr] 未知提供程序:uniqueFilterProvider <- uniqueFilter。
我在我的 home.html 中加入了 ui-filters.js(https://cdnjs.cloudflare.com/ajax/libs/angular-filter/0.5.8/angular-filter.js) 以使用独特的过滤器功能,但它没有接收到它。
我的主要 angular 模块也是这样的:
angular.module("cartApp", [])
.controller('fs',function($scope,$http){
//code here
});
我认为问题可能与 angularJS UI 模块有关。如果我将“[]”更改为“['ui.filters'],那么它无法识别该模块。
clients:
[
"Name":'test',
"age":34,
cars:
[
{
"carid": 1,
"carname": 'camry',
"color": 'red'
},
{
"carid": 2,
"carname": 'mustang',
"color": 'red'
},
{
"carid": 3,
"carname": 'landcruiser',
"color": 'yellow'
},
{
"carid": 4,
"carname": 'focus',
"color": 'blue'
},
{
"carid": 5,
"carname": 'civic',
"color": 'blue'
}
]
]
如果您将 select
绑定到汽车阵列上,汽车 1 和 2 中的红色会出现两倍,黄色会出现一次,蓝色会出现两次,所以这些颜色出现不止一次是正常的。
您可以做的是根据您的汽车创建一个颜色集合,然后添加所有项目选项:
这是一个使用 lodash 的例子:
_.forEach(clients, function(client) {
// add the available colors for each client
client.colors = _.uniq(_.map(clients.car, 'color'));
client.colors.unshift('all');}
);
在你的 HTML 中:
<div ng-repeat="client in clients">
<label>{{client.Name}}</label>
<select ng-model="selectedColor" ng-options="color for color in colors"></select>
</div>
另一种解决方案是在 <options>
上使用 ng-repeat
,但不太优雅。
希望我解决了你的问题。
首先,您的数据集格式不正确。数组没有名称-值对。
例如你的数据集是这样的。
$scope.Data = [one: "one"];
这不是正确的数组形式。
你的数据集应该是这样的。
{
"Name":"test",
"age":"34",
"cars":
[
{
"carid": 1,
"carname": 'camry',
"color": 'red'
},
{
"carid": 2,
"carname": 'mustang',
"color": 'red'
},
{
"carid": 3,
"carname": 'landcruiser',
"color": 'yellow'
},
{
"carid": 4,
"carname": 'focus',
"color": 'blue'
},
{
"carid": 5,
"carname": 'civic',
"color": 'blue'
}
]
};
语法没有问题。问题是脚本文件的加载顺序。
我在 app.js 脚本之后加载 AngularJS UI 脚本。应该是相反的。
我有以下汽车数组。我正在尝试在此数组上使用 ng-options 仅将颜色类别显示为 link 以及 "all colors" 选项。
全部,红黄蓝
<div ng-repeat="client in clients">
<label>{{client.Name}}</label>
<select ng-model="opt" ng-options="i.color for i in client.cars | unique: 'color'">
<option value="">All</option>
<option value="">{{i.color}}</option>
</select>
</div>
如果我删除“| unique: 'color'”语法,那么我会得到所有重复的颜色。
如果我在语法中保留“|unique:color”,则会收到以下错误:angular.js:13424 错误:[$injector:unpr] 未知提供程序:uniqueFilterProvider <- uniqueFilter。 我在我的 home.html 中加入了 ui-filters.js(https://cdnjs.cloudflare.com/ajax/libs/angular-filter/0.5.8/angular-filter.js) 以使用独特的过滤器功能,但它没有接收到它。 我的主要 angular 模块也是这样的:
angular.module("cartApp", [])
.controller('fs',function($scope,$http){
//code here
});
我认为问题可能与 angularJS UI 模块有关。如果我将“[]”更改为“['ui.filters'],那么它无法识别该模块。
clients:
[
"Name":'test',
"age":34,
cars:
[
{
"carid": 1,
"carname": 'camry',
"color": 'red'
},
{
"carid": 2,
"carname": 'mustang',
"color": 'red'
},
{
"carid": 3,
"carname": 'landcruiser',
"color": 'yellow'
},
{
"carid": 4,
"carname": 'focus',
"color": 'blue'
},
{
"carid": 5,
"carname": 'civic',
"color": 'blue'
}
]
]
如果您将 select
绑定到汽车阵列上,汽车 1 和 2 中的红色会出现两倍,黄色会出现一次,蓝色会出现两次,所以这些颜色出现不止一次是正常的。
您可以做的是根据您的汽车创建一个颜色集合,然后添加所有项目选项:
这是一个使用 lodash 的例子:
_.forEach(clients, function(client) {
// add the available colors for each client
client.colors = _.uniq(_.map(clients.car, 'color'));
client.colors.unshift('all');}
);
在你的 HTML 中:
<div ng-repeat="client in clients">
<label>{{client.Name}}</label>
<select ng-model="selectedColor" ng-options="color for color in colors"></select>
</div>
另一种解决方案是在 <options>
上使用 ng-repeat
,但不太优雅。
希望我解决了你的问题。
首先,您的数据集格式不正确。数组没有名称-值对。
例如你的数据集是这样的。
$scope.Data = [one: "one"];
这不是正确的数组形式。
你的数据集应该是这样的。
{
"Name":"test",
"age":"34",
"cars":
[
{
"carid": 1,
"carname": 'camry',
"color": 'red'
},
{
"carid": 2,
"carname": 'mustang',
"color": 'red'
},
{
"carid": 3,
"carname": 'landcruiser',
"color": 'yellow'
},
{
"carid": 4,
"carname": 'focus',
"color": 'blue'
},
{
"carid": 5,
"carname": 'civic',
"color": 'blue'
}
]
};
语法没有问题。问题是脚本文件的加载顺序。 我在 app.js 脚本之后加载 AngularJS UI 脚本。应该是相反的。