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

Duvida sobre Diretiva ng-controller

Ola,

Qual a explicação para o funcionamento do código abaixo do exercício 1 ? Eu retirei a tag "<img" do corpo da diretiva do angular (ng-controller="FotosController"), e mesmo assim a imagem carregou.

{{foto.titulo}}eta

Alurapic

14 respostas

O código que você colocou ou arquivo não veio na sua pergunta. Tem como postar novamente?

Poste o código para que eu possa ver. Uma coisa é certa: tem que ter uma tag img no seu html ou na sua diretiva ainda para a imagem ser exibida. Por isso preciso do codigo para ver.

Ola Flavio, abaixo o codigo solicitado. Lembrado que eu retirei a Tag img do corpo da diretiva controller do angular e mesmo assim ainda funciona. Qual o motivo? Não deveria funcionar somente no corpo ng-controller="FotosController" ?

''' <!DOCTYPE html>

{{foto.titulo}}

Alurapic

'''

Não está vindo o html. Você precisa usar backstick e não aspas simples como você está utilizando. O alura processa como html. Isso aqui é backstick `````````

<html lang="pt-br" ng-app="alurapic"> <head> <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"> <script src="js/lib/angular.min.js"></script> <script src="js/main.js"></script> <script src="js/controllers/fotos-controller.js"></script> ``

<!-- Tag img removido do corpo da diretiva do angular --> <img class="img-responsive center-block" src="{{foto.url}}" alt="{{foto.titulo}}">

<body ng-controller="FotosController"> <div class="container"> <h1 class="text-center">Alurapic</h1> </div><!-- fim container --> </body> </html>

Eu preciso do seu código O comportamento que você me relata ou eu não entendi ou tem ainda uma img em algum lugar. Por isso a importância deu ver seu código.

Agora o código apareceu! Vou ver assim que chegar em casa.

Valeu Jovem! Desculpe o amadorismo no "backstick ". Tinha esquecido desse detalhe rssrrs.

solução!

Você colocou a tag fora de body. O navegador entrou em quircks Mode e considerou a tag html o body. Isso não é coisa só angula, mas do html/browser. Se quiser fazer o teste, mova a diretiva do controller para outra tag e deixe a img dentro de body, mas o body sem o controller. Entende o problema? Seu navegador viu que você colocou indevidamente uma tag html (diretivas viram tags html) fora de body e o navegador a jogou para dentro de body para te ajudar, daí, como a tag fica dentro de body ele acha seu controller.

Aguardo seu feedback e teste.

Isso com base no html que você me passou. Você passou ele inteiro? Se eu abro seu arquivo eu vejo ele assim? Quero o html final do jeito que você diz que está, sem alteração sua ou comentário para me ajudar. Acho que esse html não é o completo. Digo isso porque não tem tag de fechamento head.

<!DOCTYPE html>
<html lang="pt-br" ng-app="alurapic">
    <head>
        <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">
        <script src="js/lib/angular.min.js"></script>
        <script src="js/main.js"></script>
        <script src="js/controllers/fotos-controller.js"></script>
    </head>

    tag image fora da diretiva ng-controller="FotosController"
    <img class="img-responsive center-block" src="{{foto.url}}" alt="{{foto.titulo}}">

    <body ng-controller="FotosController">
        <div class="container">
            <h1 class="text-center">Alurapic</h1>
        </div><!-- fim container -->
    </body>
    tag image fora da diretiva ng-controller="FotosController"
    <img class="img-responsive center-block" src="{{foto.url}}" alt="{{foto.titulo}}">
</html>

Parece que é o que disse mesmo. Compreende?

Compreendo sim. Mas não esperava tamanha habilidade do navegador em tentar corrigir. Obrigado Flavio. abs

É Av, por isso que chamamos isso de quicks mode. Seu navegador tenta te ajudar, por exemplo, o Chrome faz isso, mas não quer dizer que outros façam. Mas eu quero que você veja isso com mais clareza. Por exemplo, se você tem esse HTML:

<html>
    <head></head>
    <img src="logo.png">
    <body>

    </body>
</html>

Quando ele é carregado e a árvore DOM do navegador é construída ela fica assim:

<html>
    <head></head>

    <body>
        <img src="logo.png">    
    </body>
</html>

Como você pode ver isso? Basta criar essa página simples (ou usar a sua mesmo do angular) e usar o inspect do Google Chrome para visualizar a estrutura do DOM.

No fim, é sempre recomendado seguir o padrão da W3C da estrutura mínima de um HTML para que essas coisas não aconteçam. No seu caso, sei que fez isso para testar o escopo do controller, mas como jogou para fora do body, ocorreu o que acabei de explicar.

Abraço e bom estudo!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software