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?

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top