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

Erro depois de realizar as modificações do capítulo 11 - criando serviços com promise

Erro que está ocorrendo ao tentar carregar uma foto.

angular.min.js:102 TypeError: Cannot read property '_id' of undefined
    at http://localhost:3000/js/services/meus-servicos.js:16:19
    at new u (http://localhost:3000/js/lib/angular.min.js:115:365)
    at u (http://localhost:3000/js/lib/angular.min.js:115:344)
    at new <anonymous> (http://localhost:3000/js/services/meus-servicos.js:15:14)
    at Object.<anonymous> (http://localhost:3000/js/services/meus-servicos.js:14:23)
    at Object.e [as invoke] (http://localhost:3000/js/lib/angular.min.js:36:315)
    at Object.$get (http://localhost:3000/js/lib/angular.min.js:34:268)
    at Object.e [as invoke] (http://localhost:3000/js/lib/angular.min.js:36:315)
    at http://localhost:3000/js/lib/angular.min.js:38:110
    at d (http://localhost:3000/js/lib/angular.min.js:36:13) <ng-view class="ng-scope">

Meu código está assim:

js/services/meus-servicos.js

angular.module('meusServicos', ['ngResource'])
.factory('recursoFoto', function($resource) {

  return $resource('v1/fotos/:fotoId', null, {
      update: {
          method: 'PUT'
      }
  });

})
.factory('cadastroDeFotos', function(recursoFoto, $q) {
  var servico = {};

  servico.cadastrar = new function(foto) {
      return $q(function(resolve, reject) {
          if (foto._id) {
              recursoFoto.update({fotoId: foto._id}, foto, function() {
                  resolve({
                    mensagem: 'Foto ' + foto.titulo + ' atualizada com sucesso!',
                    inclusao: false
                  });
              }, function(erro) {
                  console.log(erro);
                  reject({
                    mensagem: 'Não foi possível alterar a foto ' + foto.titulo
                  });
              });
          } else {
              recursoFoto.save(foto, function() {
                  resolve({
                    mensagem: 'Foto ' + foto.titulo + ' incluída com sucesso!',
                    inclusao: true
                  });
              }, function(erro) {
                  console.log(erro);
                  reject({
                    mensagem: 'Não foi possível incluir a foto ' + foto.titulo
                  });
              });
          }
      });
  };

  return servico;
});

js/controllers/foto-controller.js

angular.module('alurapic')
.controller('FotoController', function($scope, recursoFoto, $routeParams, cadastroDeFotos) {

  $scope.foto = {};
  $scope.mensagem = '';

  if($routeParams.fotoId) {
      recursoFoto.get({fotoId: $routeParams.fotoId}, function(foto) {
        $scope.foto = foto;
      }, function(erro) {
        $scope.mensagem = 'Não foi possível obter a foto.';
      });
  }

  $scope.submeter = function() {
    if ($scope.formulario.$valid) {
      cadastroDeFotos.cadastrar($scope.foto)
      .then(function(dados) {
        $scope.mensagem = dados.mensagem;
      })
      .catch(function(erro) {
        $scope.mensagem = erro.mensagem;
      });
    }
  };
});

index.html

<!DOCTYPE html>
<html lang="pt-br" ng-app="alurapic">
    <head>
        <meta charset="UTF-8">
        <base href="/">
        <meta name="viewport" content="width=device-width">
        <title>Alurapic</title>
        <link rel="stylesheet" href="css/bootstrap.min.css">
        <link rel="stylesheet" href="css/bootstrap-theme.min.css">
        <link rel="stylesheet" href="css/efeitos.css">
        <script src="js/lib/angular.min.js"></script>
        <script src="js/lib/angular-animate.min.js"></script>
        <script src="js/lib/angular-route.min.js"></script>
        <script src="js/lib/angular-resource.min.js"></script>
        <script src="js/main.js"></script>
        <script src="js/controllers/fotos-controller.js"></script>
        <script src="js/controllers/foto-controller.js"></script>
        <script src="js/controllers/grupos-controller.js"></script>
        <script src="js/services/meus-servicos.js"></script>
        <script src="js/directives/minhas-diretivas.js"></script>
    </head>
    <body>
        <div class="container">
          <ng-view></ng-view>
        </div> <!-- fim container -->
    </body>
</html>
2 respostas
solução!

Oi Eduardo!

No seu serviço esta assim

servico.cadastrar = new function(foto) {

Você usou new indevidamente.

Obrigado Flavio!