【发布时间】:2023-01-13 00:10:14
【问题描述】:
我正在开发一个带有multiple selection 的两个下拉菜单的项目,如果我在第一个下拉菜单中选择squirtle,则该选项将从第二个下拉菜单中禁用。但这不是预期的输出,而是:
- 当有人从第一个下拉菜单中选择一个选项时,整个选项组应该从第二个下拉菜单中禁用/启用(仅第二个下拉菜单)。就像我从第一个下拉菜单中的
Water组中选择Squirtle然后整个Water组应该在第二个下拉列表中被禁用/启用 - 多重选择应该只适用于特定组。就像我在第一个下拉列表中从
Water组中选择Squirtle一样,我应该只能从第一个下拉列表中的Water组中选择另一个选项(在第二个下拉列表中没有这样的限制,因为在第一个下拉菜单在第二个下拉菜单中被完全禁用(或删除)),如果我尝试从另一个组中选择,则两个下拉菜单都应该重置。这是 JSON:
items = [ { type: 'all', name: ['All Pokemon'], }, { type: 'water', name: [ 'Squirtle', 'Wartortle', 'Blastoise', 'Psyduck', 'Golduck', 'Tentacool', 'Seel', ], }, { type: 'fire', name: [ 'Charmander', 'Charizard', 'Vulpix', 'Arcanine', 'Ponyta', 'Magmar', 'Cyndaquil', ], }, { type: 'earth', name: ['Growlithe', 'Arcanine', 'Geodude', 'Golem', 'Onix'], }, ];我做了两个数组:
this.arr1 = this.items; this.arr2 = this.items.filter((x) => x.type !== 'all');现在,当有人从第一个下拉列表
(arr1)中选择一个选项时,我试图根据在第一个下拉列表中选择的选项使用以下逻辑从(arr2)中过滤掉整个对象:this.arr2.filter((x) => { console.log(x.name); const data = []; !includeTest.find((y) => { console.log('y ->', y); if (x.name.includes(y)) { data.push(y); console.log('data ->', data); } }); x.name = data; console.log('x.name', x.name); });在这里,
includeTest包含基于它的字符串数组,我必须从另一个数组中过滤掉对象。 这是 problem 的 stackblitz 表示:
【问题讨论】:
-
您能否添加一个行为示例,例如:选择 squirtle,然后在下拉列表 1 中禁用 x 并启用 y,在下拉列表 2 中禁用 alfa 并启用 beta。您对您要实现的目标的解释相当混乱。
-
@IDK4real 我在问题中添加了更多详细信息。关于第二点,采取这种方式,当用户从第一个下拉列表中的组中选择一个选项时,只允许该组从第二个下拉列表中被禁用。由于存在多项选择,因此不应允许用户同时从第一个下拉列表中的不同组中进行选择,如果他们尝试这样做,则当第一个下拉列表中的组发生更改时,两个下拉列表都应重置。
标签: javascript angular typescript angular-material