Angular.js Selecione com ngOptions:Rotular o optgroup
-
21-12-2019 - |
Pergunta
Eu só comecei a jogar com Angular.js e tem uma pergunta sobre ngOptions:É possível rotular o optgroup?
Vamos supor que 2 objetos - carros e garagens.
cars = [
{"id": 1, "name": "Diablo", "color": "red", "garageId": 1},
{"id": 2, "name": "Countach", "color": "white", "garageId": 1},
{"id": 3, "name": "Clio", "color": "silver", "garageId": 2},
...
]
garages = [
{"id": 1, "name": "Super Garage Deluxe"},
{"id": 2, "name": "Toms Eastside"},
...
]
Com esse código eu tenho quase o resultado que eu quero:
ng-options = "car.id as car.name + ' (' + car.color + ')' group by car.garageId for car in cars"
Resultado da escolha:
-----------------
1
Diablo (red)
Countach (white)
Firebird (red)
2
Clio (silver)
Golf (black)
3
Hummer (silver)
-----------------
Mas eu quero rotular o optgroups como "Garagem 1", "Garagem 2", ...ou, melhor ainda exibir o nome da garagem e não apenas o garageId.
O angularjs.org documentação para selecionar não diz nada sobre rótulos para o optgroup, mas eu gostaria de estender o grupo por parte de ngOptions como group by car.garageId as 'Garage ' + car.garageId
ou group by car.garageId as getGarageName(car.garageId)
- que infelizmente não está a funcionar.
A minha única solução é, até agora, para adicionar uma nova propriedade "garageDisplayName" para o carro e objetos loja lá o id + garagem nome e use-o como grupo de parâmetro.Mas eu não quero a atualização de todos os carros sempre que uma garagem nome é alterado.
Existe uma forma de rotular o optgroups com ngOptions, ou devo usar ngRepeat nesse caso?
Solução
Você pode apenas chamar getGarageName()
no group by
sem o uso de um as
...
ng-options="car.id as car.name + ' (' + car.color + ')' group by getGarageName(car.garageId) for car in cars"
Em vez de armazenar a garagem de identificação em cada carro, você pode querer considerar a armazenar uma referência para o objeto de garagem nas garagens matriz.Dessa forma, você pode alterar o nome de garagem e não há necessidade de alterar cada carro.E o group by
torna-se simplesmente...
group by car.garage.name