ngFor 完整列表和唯一列表
ngFor full list and unique list
抱歉,如果这是一个重复的问题,我是 Angular 的新手,我已经尝试实施多种解决方案但无济于事,而且似乎找不到可以解决我的问题的线索.
我正处于设置网络应用程序的初始阶段,所以现在我正在使用 InMemoryDataService(我确实在 Laravel 中设置了服务,只是还没有绑定它们) 看起来像这样:
import { InMemoryDbService } from 'angular-in-memory-web-api';
export class InMemoryDataService implements InMemoryDbService {
createDb() {
const passwords = [
{ id: 1, team_id: 1, team_name: 'Dragons', fname: 'Bob', lname: 'Smith'},
{ id: 2, team_id: 1, team_name: 'Dragons', fname: 'Jason', lname: 'Roberts'},
{ id: 3, team_id: 1, team_name: 'Dragons', fname: 'Mike', lname: 'Ferraro'},
{ id: 4, team_id: 2, team_name: 'Eagles', fname: 'Jeremy', lname: 'Lovano'},
{ id: 5, team_id: 2, team_name: 'Eagles', fname: 'Robert', lname: 'Casey'},
{ id: 6, team_id: 3, team_name: 'Wolves', fname: 'Mark', lname: 'Thomas'},
{ id: 7, team_id: 3, team_name: 'Wolves', fname: 'Steve', lname: 'Garner'}
];
return {clients};
}
}
我可以让它正常显示并使用 ngFor 构建数据 table 但我还想有一个 select 菜单只使用独特的团队,就像这样:
<select>
<option value="1">Dragons</option>
<option value="2">Eagles</option>
<option value="3">Wolves</option>
</select>
完成此任务的最佳方法是什么?
你可以这样做:
const clients = [
{ id: 1, team_id: 1, team_name: 'Dragons', fname: 'Bob', lname: 'Smith'},
{ id: 2, team_id: 1, team_name: 'Dragons', fname: 'Jason', lname: 'Roberts'},
{ id: 3, team_id: 1, team_name: 'Dragons', fname: 'Mike', lname: 'Ferraro'},
{ id: 4, team_id: 2, team_name: 'Eagles', fname: 'Jeremy', lname: 'Lovano'},
{ id: 5, team_id: 2, team_name: 'Eagles', fname: 'Robert', lname: 'Casey'},
{ id: 6, team_id: 3, team_name: 'Wolves', fname: 'Mark', lname: 'Thomas'},
{ id: 7, team_id: 3, team_name: 'Wolves', fname: 'Steve', lname: 'Garner'}
];
const uniqueTeams = [];
clients.forEach(client => {
if(unqiueTeams.indexOf(client.team_name) === -1) {
uniqueTeams.push(client.team_name);
}
});
console.log(uniqueTeams);
您可以使用 angular 较新版本默认提供的 lodash 库
有 uniqBy 属性 删除重复。
例如
let clients = [
{ id: 1, team_id: 1, team_name: 'Dragons', fname: 'Bob', lname: 'Smith'},
{ id: 2, team_id: 1, team_name: 'Dragons', fname: 'Jason', lname: 'Roberts'},
{ id: 3, team_id: 1, team_name: 'Dragons', fname: 'Mike', lname: 'Ferraro'},
{ id: 4, team_id: 2, team_name: 'Eagles', fname: 'Jeremy', lname: 'Lovano'},
{ id: 5, team_id: 2, team_name: 'Eagles', fname: 'Robert', lname: 'Casey'},
{ id: 6, team_id: 3, team_name: 'Wolves', fname: 'Mark', lname: 'Thomas'},
{ id: 7, team_id: 3, team_name: 'Wolves', fname: 'Steve', lname: 'Garner'}
];
clients = _.uniqBy(clients, 'team_name');
console.log(clients);
为此您不需要 lodash,管道也不是一个好主意(参见 https://angular.io/guide/pipes#no-filter-pipe)。
使用一些现代的方法简单地创建一个独特的元素列表 Javascript:
this.uniqueTeams = Array.from(new Set(teams.map(team => team.team_name)));
这是类型安全的、无依赖性的并且没有性能问题。
抱歉,如果这是一个重复的问题,我是 Angular 的新手,我已经尝试实施多种解决方案但无济于事,而且似乎找不到可以解决我的问题的线索.
我正处于设置网络应用程序的初始阶段,所以现在我正在使用 InMemoryDataService(我确实在 Laravel 中设置了服务,只是还没有绑定它们) 看起来像这样:
import { InMemoryDbService } from 'angular-in-memory-web-api';
export class InMemoryDataService implements InMemoryDbService {
createDb() {
const passwords = [
{ id: 1, team_id: 1, team_name: 'Dragons', fname: 'Bob', lname: 'Smith'},
{ id: 2, team_id: 1, team_name: 'Dragons', fname: 'Jason', lname: 'Roberts'},
{ id: 3, team_id: 1, team_name: 'Dragons', fname: 'Mike', lname: 'Ferraro'},
{ id: 4, team_id: 2, team_name: 'Eagles', fname: 'Jeremy', lname: 'Lovano'},
{ id: 5, team_id: 2, team_name: 'Eagles', fname: 'Robert', lname: 'Casey'},
{ id: 6, team_id: 3, team_name: 'Wolves', fname: 'Mark', lname: 'Thomas'},
{ id: 7, team_id: 3, team_name: 'Wolves', fname: 'Steve', lname: 'Garner'}
];
return {clients};
}
}
我可以让它正常显示并使用 ngFor 构建数据 table 但我还想有一个 select 菜单只使用独特的团队,就像这样:
<select>
<option value="1">Dragons</option>
<option value="2">Eagles</option>
<option value="3">Wolves</option>
</select>
完成此任务的最佳方法是什么?
你可以这样做:
const clients = [
{ id: 1, team_id: 1, team_name: 'Dragons', fname: 'Bob', lname: 'Smith'},
{ id: 2, team_id: 1, team_name: 'Dragons', fname: 'Jason', lname: 'Roberts'},
{ id: 3, team_id: 1, team_name: 'Dragons', fname: 'Mike', lname: 'Ferraro'},
{ id: 4, team_id: 2, team_name: 'Eagles', fname: 'Jeremy', lname: 'Lovano'},
{ id: 5, team_id: 2, team_name: 'Eagles', fname: 'Robert', lname: 'Casey'},
{ id: 6, team_id: 3, team_name: 'Wolves', fname: 'Mark', lname: 'Thomas'},
{ id: 7, team_id: 3, team_name: 'Wolves', fname: 'Steve', lname: 'Garner'}
];
const uniqueTeams = [];
clients.forEach(client => {
if(unqiueTeams.indexOf(client.team_name) === -1) {
uniqueTeams.push(client.team_name);
}
});
console.log(uniqueTeams);
您可以使用 angular 较新版本默认提供的 lodash 库
有 uniqBy 属性 删除重复。
例如
let clients = [
{ id: 1, team_id: 1, team_name: 'Dragons', fname: 'Bob', lname: 'Smith'},
{ id: 2, team_id: 1, team_name: 'Dragons', fname: 'Jason', lname: 'Roberts'},
{ id: 3, team_id: 1, team_name: 'Dragons', fname: 'Mike', lname: 'Ferraro'},
{ id: 4, team_id: 2, team_name: 'Eagles', fname: 'Jeremy', lname: 'Lovano'},
{ id: 5, team_id: 2, team_name: 'Eagles', fname: 'Robert', lname: 'Casey'},
{ id: 6, team_id: 3, team_name: 'Wolves', fname: 'Mark', lname: 'Thomas'},
{ id: 7, team_id: 3, team_name: 'Wolves', fname: 'Steve', lname: 'Garner'}
];
clients = _.uniqBy(clients, 'team_name');
console.log(clients);
为此您不需要 lodash,管道也不是一个好主意(参见 https://angular.io/guide/pipes#no-filter-pipe)。
使用一些现代的方法简单地创建一个独特的元素列表 Javascript:
this.uniqueTeams = Array.from(new Set(teams.map(team => team.team_name)));
这是类型安全的、无依赖性的并且没有性能问题。