Angular: como atualizar o modelo com propriedades de objeto único

Problema: você tem uma coleção de objetos que são usados ​​para construir um selecte deseja vincular a opção selecionada a uma única propriedade.

TL; DR; Solução: use ng-repeat+ ng-valuepara construir o select.


Detalhes:

ng-valueatributo recebe uma expressão angular que será usada para vincular ng-model. Tentei usar, ng-optionsmas só funcionou para mim durante o uso ng-repeat.

Código do controlador:

app.controller('CWExampleController',function(){
//collection:
this.persons = [{name:'Mike',id:1},{name:'Molly',id:2}];

//ng-model property:
this.personId = null;
})

HTML:

<div ng-controller="CWExampleController as ctrl">
<select ng-model="ctrl.personId" ng-value="p.id">
<option ng-repeat="p in ctrl.persons" value="{{p.id}}">{{p.name}}</option>
</select>
<p>Selected person id: {{ctrl.personId}}</p>
</div>