Segue novamente meus códigos para verificar o que eu fiz de errado.
foto.html
<div class="page-header text-center">
<h1>{{foto.titulo}}</h1>
</div>
<p ng-show="mensagem.length" class="alert alert-info">{{mensagem}}</p>
<form novalidate name="formulario" class="row" ng-submit="salvar()">
<div class="col-md-6">
<div class="form-group">
<label>Título</label>
<input name="titulo" class="form-control" ng-model="foto.titulo" required ng-maxlenght="20">
<span ng-show = "formulario.$submitted && formulario.titulo.$error.required"
class="form-control alert-danger">
Título obrigatório
</span>
</div>
<div class="form-group">
<label>URL</label>
<input name="url" class="form-control" ng-model="foto.url" required>
<span ng-show = "formulario.$submitted && formulario.url.$error.required"
class="form-control alert-danger">
URL obrigatória
</span>
</div>
<div class="form-group">
<label>Descrição</label>
<textarea name="descricao" class="form-control" ng-model="foto.descricao">
</textarea>
</div>
<div class="form-group">
<label>Grupo</label>
<select name="grupo" class="form-control" required ng-model="foto.grupo"
ng-controller="GruposController"
ng-options="grupo._id as (grupo.nome | uppercase) for grupo in grupos" required>
<option value="">Escolha um grupo</option>
</select>
<span ng-show="formulario.$submitted && formulario.grupo.$error.required" class="form-control alert-danger">
Grupo obrigatório
</span>
</div>
<button type="submit" class="btn btn-primary">
Salvar
</button>
<a href="/" meu-focus class="btn btn-primary" >Voltar</a>
<hr>
</div>
<div class="col-md-6">
<minha-foto url="{{foto.url}}" titulo="{{foto.titulo}}">
</div>
</form>
serviços:
/**
* meusServicos Module
*
* Description
*/
angular.module('meusServicos', ['ngResource']).factory('recursoFoto', function($resource) {
'use strict';
return $resource('/v1/fotos/:fotoId', null, {
'update': {
method: 'PUT'
}
});
})
.factory('cadastroDeFoto', function(recursoFoto, $q, $rootScope) {
'use strict';
var service = {};
var evento = 'fotoCadastrada';
service.cadastrar = function(foto) {
return $q(function(resolve, reject) {
if (foto._id) {
recursoFoto.update({
fotoId: foto._id
},
foto,
function() {
$rootScope.$broadcast(evento);
resolve({
mensagem: 'Foto atualizada com sucesso!',
inclusao: false
});
},
function() {
reject({
mensagem: 'Não foi possível alterar a foto!'
})
});
} else {
recursoFoto.save (foto , function () {
$rootScope.$broadcast(evento);
resolve({
mensagem: 'Foto cadastrada com sucesso!',
inclusao: true
});
}, function () {
reject({
mensagem: 'Não foi possível cadastrar a foto!'
})
});
}
})
};
return service;
});
minhas-diretivas.js
angular.module('minhasDiretivas',[])
.directive('meuPainel',function(){
var ddo = {};
ddo.restrict = 'AE'
ddo.scope = {
titulo : '@'
};
ddo.transclude = true;
ddo.templateUrl = 'js/directives/meu-painel.html'
return ddo;
})
.directive('minhaFoto',function(){
var ddo = {};
ddo.restrict = 'E'
ddo.scope = {
url: '@',
titulo : '@'
};
ddo.templateUrl = 'js/directives/minha-foto.html'
return ddo;
})
.directive('meuBotaoPerigo', function() {
var ddo = {};
ddo.restrict = 'E'
ddo.scope = {
nome: '@',
acao : '&'
};
ddo.template = '<button ng-click="acao()" class="btn btn-danger btn-block"> {{nome}} </button>'
return ddo;
})
.directive('meuFocus', function () {
var ddo = {};
ddo.restrict = 'A';
ddo.link = function (scope, element) {
scope.$on = ('fotoCadastrada' , function() {
element[0].focus();
});
};
return ddo;
});
main.js
angular.module('alurapic',['minhasDiretivas','ngAnimate', 'ngRoute', 'meusServicos'])
.config(function($routeProvider,$locationProvider){
$locationProvider.html5Mode(true);
$routeProvider.when('/fotos',{
templateUrl: 'partials/principal.html',
controller: 'FotosController'
})
.when('/fotos/news',{
templateUrl: 'partials/foto.html',
controller:'FotoController'
})
.when('/fotos/edit/:fotoId',{
templateUrl: 'partials/foto.html',
controller:'FotoController'
})
.otherwise({redirectTo: '/fotos'});
});
index.html
<!DOCTYPE html>
<html lang="pt-br" ng-app="alurapic">
<head>
<base href="/"/>
<meta charset="UTF-8">
<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/directives/minhas-diretivas.js"></script>
<script src="js/services/meus-servicos.js"></script>
</head>
<body>
<div class="container">
<ng-view></ng-view>
</div>
</body>
</html>