Estou tentando obter a caixa de seleção para começar com uma opção pré-preenchida usando ng-repeat com o AngularJS 1.1.5. Em vez disso, a seleção sempre começa com nada selecionado. Ele também tem uma opção vazia, que eu não quero. Eu acho que há um efeito colateral de nada ser selecionado.
Posso fazer isso funcionar usando ng-options em vez de ng-repeat, mas quero usar ng-repeat neste caso. Embora meu exemplo resumido não o mostre, eu também quero definir o atributo title de cada opção, e não há como fazer isso usando ng-options, tanto quanto eu sei.
Eu não acho que isso esteja relacionado ao problema comum de escopo / herança prototípica do AngularJs. Pelo menos não vejo nada óbvio ao inspecionar em Batarang. Além disso, quando você escolhe uma opção na seleção com a interface do usuário, o modelo é atualizado corretamente.
Aqui está o HTML:
<body ng-app ng-controller="AppCtrl">
<div>
Operator is: {{filterCondition.operator}}
</div>
<select ng-model="filterCondition.operator">
<option
ng-repeat="operator in operators"
value="{{operator.value}}"
>
{{operator.displayName}}
</option>
</select>
</body>
E o JavaScript:
function AppCtrl($scope) {
$scope.filterCondition={
operator: 'eq'
}
$scope.operators = [
{value: 'eq', displayName: 'equals'},
{value: 'neq', displayName: 'not equal'}
]
}
JS Fiddle para isso: http://jsfiddle.net/coverbeck/FxM3B/2/
fonte
Respostas:
ESTÁ BEM. Se você não quiser usar da maneira correta
ng-options
, poderá adicionarng-selected
atributo com uma lógica de verificação de condição para que aoption
diretiva faça com que a pré-seleção funcione.Working Demo
fonte
Para a tag select, angular fornece a diretiva ng-options. Ele fornece a estrutura específica para configurar opções e definir um padrão. Aqui está o violino atualizado usando ng-options que funciona conforme o esperado: http://jsfiddle.net/FxM3B/4/
HTML atualizado (o código permanece o mesmo)
fonte
Obrigado a TheSharpieOne por apontar a opção ng-selecionada. Se isso tivesse sido postado como uma resposta e não como um comentário, eu teria feito a resposta correta.
Aqui está um JSFiddle em funcionamento: http://jsfiddle.net/coverbeck/FxM3B/5/ .
Também atualizei o violino para usar o atributo title, que havia deixado de fora no meu post original, pois não era a causa do problema (mas é o motivo pelo qual desejo usar ng-repeat em vez de ng-options) .
HTML:
JS:
fonte
O fato de angular estar injetando um elemento de opção vazio na seleção é que o objeto de modelo vinculado a ele por padrão vem com um valor vazio quando inicializado.
Se você quiser selecionar uma opção padrão, provavelmente poderá configurá-la no escopo no controlador
Se você deseja um espaço reservado para uma opção vazia, isso funciona para mim
fonte
Conforme sugerido, você precisa usar ng-options e, infelizmente, acredito que você precise referenciar o elemento array como padrão (a menos que o array seja um array de strings).
http://jsfiddle.net/FxM3B/3/
O JavaScript:
O HTML:
fonte
Se você estiver usando md-select e ng-repeat ing md-option a partir de material angular, poderá adicionar
ng-model-options="{trackBy: '$value.id'}"
às cinzas da tag md-select mostradas nesta canetaCódigo:
fonte