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

foto não é exibida na segunda coluna do formulário

olá, estou acompanhando o curso aqui. até peguei o arquivo pronto do próximo capítulo que será o 8. Mas o problema ocorre até com com eles. Quando coloco o link da imagem no campo url, não está aparecendo a imagem do lado. pelo inspect do chrome aparece as tags do angular corretamente. até no submit da a mensagem de sucesso. na pagina principa, não aparece o título, nem a imagem. testei colocando a angular Expression em um parágrafo e a angular expression está funcionando. será que é algum problema com o navegador, no console não apresenta erro.

5 respostas

Cole o código do template do formulário completo para que possamos ver.

aqui é o 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/main.js"></script>


    <script src="js/controllers/fotos-controller.js"></script>
    <script src="js/controllers/foto-controller.js"></script>
    <script src="js/directives/minhas-diretivas.js"></script>

    <!-- importando o módulo ng animate -->
    <script src="js/lib/angular-animate.min.js"></script>

    <!-- importando o módulo de rotas -->
    <script src="js/lib/angular-route.min.js"></script>
</head>

<body>
    <div class="container">
        <ng-view></ng-view>
    </div>
    <!-- fim container -->
</body>

</html>

aqui é da partials/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="submeter()">
    <div class="col-md-6">

        <div class="form-group">
            <label for="titulo">Título</label>
            <input id="titulo" name="titulo" class="form-control" ng-model="foto.titulo" required ng-maxlength="20">
            <span ng-show="formulario.$submitted && formulario.titulo.$error.required" class="form-control alert-danger">
                campo nome é obrigatório
            </span>
            <span ng-show="formulario.$submitted && formulario.titulo.$error.maxlength" class="form-control alert-danger">
                No máximo 20 caracteres.
            </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>

        <button type="submit" class="btn btn-primary" ng-disabled="formulario.$invalid">
            Salvar
        </button>
        <a href="/" class="btn btn-primary">Voltar</a>

    </div>
    <div class="col-md-6">
        <minha-foto url="{{foto.url}}" titulo="{{foto.titulo}}"></minha-foto>
        <!-- <p>{{foto.url}}</p>
        <p>{{foto.titulo}}</p> -->
    </div>
</form>

aqui é do controller foto-controller.js

angular.module('alurapic').controller('FotoController', function($scope, $http) {

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

    $scope.submeter = function() {
        console.log($scope.foto);

        if ($scope.formulario.$valid) {
            $http.post('/v1/fotos', $scope.fotos)
                .success(function() {
                    console.log('Foto adicionada com sucesso.');
                    $scope.foto = {};
                    $scope.mensagem = 'Foto cadastrada com sucesso.';
                })
                .error(function(erro) {
                    console.log('Não foi possível cadastrar a foto');
                    $scope.mensagem = 'Não foi possível cadastrar a foto.';

aqui é da minhas-diretivas.js

angular.module('minhasDiretivas', [])
    .directive('meuPainel', function() {

        var ddo = {};

        ddo.restrict = 'AE';
        ddo.transclude = true;

        ddo.scope = {
            titulo: '@'
        }

        ddo.templateUrl = 'js/directives/meu-painel.html';

        return ddo;
    })
    .directive('minhaFoto', function() {

        var ddo = {};

        ddo.restrict = 'AE';

        ddo.scope = {
            url: '@',
            titulo: '@'
        }

        ddo.template = '<img class="img-responsive center-block" ng-src="{{url}}" alt="{{titulo}}">';

        return ddo;
    });

aqui é do modulo principal com as rotas

angular.module('alurapic', ['minhasDiretivas', 'ngAnimate', 'ngRoute'])
    .config(function($routeProvider, $locationProvider) {

        $locationProvider.html5Mode(true);

        $routeProvider.when('/fotos', {
            templateUrl: 'partials/principal.html',
            controller: 'FotosController'
        });

        $routeProvider.when('/fotos/new', {
            templateUrl: 'partials/foto.html',
            controller: 'FotoController'
        })

        $routeProvider.otherwise({ redirectTo: '/fotos' });

    });

Parece ser um bug do browser. Experimente não usar a diretiva <foto> e em seu lugar usar uma <img> passando os valores do data binding.

solução!

consegui resolver.

Com <img> também estava com problema, mas era porque eu estava colocando link errado, ao invés de colocar o link da imagem estava colocando o link da pagina que tinha a imgem. estava colando esse: http://www.fundosanimais.com/imagens-elefante-sua-cria-jpg

ao invés desse: http://www.fundosanimais.com/Imagens/elefante-sua-cria.jpg

rsrs.

mas també estava enviando o objeto errado no posto do $http.

agora está resolvido.

obrigado Flávio. só cheguei nessa confusão, depois de testar colocando a tag direto.

Mandou bem descobrindo o problema. Agora é continuar com os estudos, pois tem mais coisa pela frente!

Vou marcar sua resposta como solução para que ganhe os pontos!