Solucionado (ver solução)
Solucionado
(ver solução)
7
respostas

Aula 9. Tornando nosso cadastro ainda melhor - ng-options - Todas as opções com selected

Fiz o select de grupos que é mencionado na aula 9, depois de ter montado a diretiva de grupos, até ai tudo bem. Mas o select mostrado em tela fica com todas as suas options com selected e por isso no momento da gravação (validação em foto-controller.js , função submeter) o $scope.formulario.$valid não é válido, por isso aparece a mensagem que é obrigatório o preenchimento do grupo(mesmo ele já tendo sido selecionado) e a gravação não é realizada. Tentei montar o select manualmente e dessa forma dá certo.

7 respostas

Onde está o seu código?

Bom dia, desculpe...segue // foto.html select e span com mensagem de validação em questão.

<select name="grupo" class="form-control" 
ng-controller="GruposController"
ng-model="foto.grupo"
ng-options="grupo_id as (grupo.nome | uppercase) for grupo in grupos">
    <option value="">Selecione Grupo</option>
</select>
<span ng-show="formulario.$submitted && formulario.grupo.$error.required" class="form-control alert-danger">
    Grupo obrigatório
</span>

//Controller dos grupos grupos-controller.js

angular.module('alurapic').controller('GruposController', function($scope, $http){
    $scope.grupos = [];
    $http.get('v1/grupos')
    .success(function(grupos){$scope.grupos = grupos;})
    .error(function(erro){console.log(erro)});
});

Os grupos vem normalmente e o select também é montado normalmente, o problema realmente é apenas o fato de todas as options ficarem com o selected. Deixei sem o required do select para poder enviar o código. Obrigada :

<select name="grupo" class="form-control" 
ng-controller="GruposController"
ng-model="foto.grupo"
ng-options="grupo_id as (grupo.nome | uppercase) for grupo in grupos">
    <option value="">Selecione Grupo</option>
</select>
<span ng-show="formulario.$submitted && formulario.grupo.$error.required" class="form-control alert-danger">
    Grupo obrigatório
</span>
<select name="grupo" class="form-control" 
ng-controller="GruposController"
ng-model="foto.grupo"
ng-options="grupo_id as (grupo.nome | uppercase) for grupo in grupos">
    <option value="">Selecione Grupo</option>
</select>
<span ng-show="formulario.$submitted && formulario.grupo.$error.required" class="form-control alert-danger">
    Grupo obrigatório
</span>

Pode enviar o controller do cadastro? Você enviou apenas o controller do grupo. Pode ficar tranquila, mais de 1000 alunos passaram por essa parte sem qualquer problema. A gente descobre.

solução!

Seu problema foi um errinho de digitação. Veja:

ng-options="grupo_id a

O correto é grupo._id. As propriedades de objetos em JavaScript são acessadas através do operador ponto.

Sucesso e bom estudo!

Nossa, eu nem me liguei nesse ponto... era isso mesmo! Obrigada. :) E desculpe pela quantidade de replicação de códigos, tive um problema aqui no note.