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

Depois de dividir o html em partials o estilo parou de funcionar

Oi pessoal, tudo bem? Percebi que após dividir meu HTML em partials e diretivas, as transições pararam de funcionar. Alguém mais teve esse problema? Testei no Chrome, até coloquei uma propriedade para setar a cor dos elementos (só para ver se realmente estava lendo o arquivo css) e deu certo, a cor alterou. No entanto, as transiçoes não ocorrem.

Segue abaixo meus códigos:

//head do index.html

<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/estilos.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/main.js"></script>

        <script src="js/controllers/fotos-controller.js"></script>

        <script  src="js/directives/minhas-diretivas.js"></script>

    </head>

// principal.html com o painel que referencia a classe do arquivo estilos.html


//campo de busca
 <form action="">
            <input type="text" class="form-control" placeholder="filtrar pelo título da foto" ng-model="filtro" ng-model-options="{debounce:500}">
 </form>

//diretiva meuPainel
<meu-painel class="col-md-2 painel-animado"ng-repeat="foto in fotos | filter: filtro" titulo="{{foto.titulo}>

    <minha-foto url="{{foto.url}}" titulo="{{foto.titulo}}">

</meu-painel><!-- fim do painel -->



//estilos.css

 .painel-animado {
    -moz-transition:transform 0.8s;
    -webkit-transition:transform 0.8s;
    -ms-transition:transform 0.8s;
    -o-transition:transform 0.8s;
    transition:transform 0.8s;
}

.painel-animado.ng-leave-active {
  -moz-transform: scale(0.1);
  -webkit-transform: scale(0.1);
  -ms-transform: scale(0.1);
  -o-transform: scale(0.1);
  transform: scale(0.1);
}

Baixei o arquivo 6-alurapic para ver se nele as transiçoes tinham algum problema mas elas funcionaram normalmente.

Alguém poderia me ajudar?

7 respostas

Olha, você colou tudo junto, tá muito confuso.

Cole o código HTML formatado do index em separado do principal, depois, separe o código CSS formatado. Não use comentário com \\ no HTML.

Só olhando assim seu HTML está com problemas de digitação, por exemplo:

titulo="{{foto.titulo}>

Ficou faltando aspas e uma chave.

Faz isso, mas não coloque comentário \\.

Assim que fizer, eu dou uma olhada, pode ser mais erros de digitação no seu HTML.

Você chegou a olhar o console do Chrome a procura de erros?

E outro ponto IMPORTANTE demais! Você está acessando as páginas através do servidor? Se não acessar, jamais suas parciais funcionarão. Tem que acessar por http://localhost:3000. Como explico no treinamento, Angular usa requisição ajax para buscar as parciais, por isso um servidor é necessário. Se você abrir index.html direto no seu navegador sem passar pelo servidor, não vai funcionar.

Oi Josélia, to monitorando sua situação. Aguardo seu código separado (eu poderia até editar teu post e separar, mas acho legal você postar novamente).

Aguardo seu feedback e só uma coisa: não se preocupe, a gente descobre o que está acontecendo. Só vou ser um pouco chatinho na hora de exibir código postado perfeito porque isso vai te ajudar em outros treinamentos à pedir a ajuda.

Quando postar o index.htm, posta o HTML inteiro, não apenas o head. Se tiver alguma tag não fechada ou algum erro de digitação o navegador vai entrar em quircks mode.

Poste também seu main.js.

Abraço

Oi Flávio! Primeiramente, obrigada por este treinamento, sua didática é excelente e eu estou gostando muito de aprender Angular contigo.

No momento que eu postei os códigos, acreditei que colocando apenas os pedaços que aparentavam estar com problemas seriam o suficiente. Mas depois percebi que ficou uma salada que só fez sentido para mim =s

O que aconteceu foi o seguinte: no meu <head> da index.html eu estava importando o arquivo css/estilos.css. No entanto, depois eu percebi que o nome do arquivo era efeitos.css . Acho que em uma das aulas eu copiei algum trecho do seu código e perdi a referência neste pequeno detalhe.

Quanto aos comentário em formato de // não se preocupe, eu coloquei apenas aqui no formatador de código da Alura porque achei que seria mais facil para formatar. No meu HTML eles estão no formato certinho.

Meu server está ok tbm, estou usando no Mac e sem nenhum problema.

Neste exercício o que me pegou mesmo foi a referência incorreta e eu percebi depois de ter passado horas sem saber porque não funcionava e depois de ter aberto o tópico. Me desculpe por isso.

No mais, fiquei com uma dúvida no seguinte: qual a diferença de no fotos-controller.js você ter

.controller('FotosController', function($scope, $http) {
    $scope.fotos = {};
});

e

.controller('FotosController', function($scope, $http) {
    $scope.fotos = [];
});

Eu sei que em javaScript os colchetes significam um array e as chaves um objeto. Mas não entendi se tanto faz eu ter um array que guarde varios objetos foto ou um objeto fotos que guarde vários objetos foto. Faz sentido?

Muito obrigada!

Josélia, para tirar dúvidas não precisa me pedir desculpas :) Enquanto aguardava seu código formatado bonitinho estava aqui tentando entendê-lo e realmente o lance foi a troca do arquivo CSS. Fico muito contente de saber que encontrou o problema sozinha!

Sobre o \\, quando você usa o markdown (o formatador de texto do alura) ele zoa com a formatação do código HTML quando ele está presente.

Agora, vamos a sua nova dúvida.

Se você faz

.controller('FotosController', function($scope, $http) {
    $scope.fotos = {};
});

Você estará mentindo para o programador. Mentindo como? Se a propriedade está no plural, eu que programo, conto que aquela variável é uma lista. Se é uma lista, eu espero poder realizar um loop for ou usar o foreach. Mas a variável com nome no plural não é uma lista (array) é um objeto. Eu como programador só vou ver o erro quando rodar meu código. Quando eu digo "eu programador" é outra pessoa que dá manutenção no seu código ou você mesma quando sai de férias 1 mês e quando volta olha a propriedade e acha que é um array.

Agora, quando você realmente usa um array:

.controller('FotosController', function($scope, $http) {
    $scope.fotos =[];
});

Eu posso usar o loop for e até mesmo o ng-repeat do angular porque ele é uma lista. Claro, é uma lista vazia, não tem nada, mas se eu iterar sobre ela não terei erro, só não verei nada.

Em programação, os nomes tem um impacto fenomenal na manutenção do código.

Agora, se você quer usar um objeto para guardar várias fotos, me diz como seria o código para acessar a primeira foto, a segunda foto? E se eu quiser pegar a última foto? Complicou? É por isso que a estrutura de dados que representa uma lista é mais fácil de se trabalhar. Outro exemplo: tenta usar o ng-repeat com um objeto onde suas zilhões de propriedades são fotos. Não vai conseguir.

O que você pode ter é 10, 20 ou 30 fotos como objeto dentro de uma lista, assim:

$scope.fotos = [{ titulo: 'A'}, { titulo: 'B'}, { titulo: 'C'}];

E no ng-repeat:

<li ng-repeat="foto in fotos">{{titulo}}</li>

Apesar do Angular ser um framework poderoso, saber JavaScript e toda aquela bagaça de lógica de programação é fundamental, caso contrário, seremos meros repetidores (cortar e colar código) de terceiros. As coisas funcionam, mas a criatividade, a arte de criar muitas vezes não vem de uma cópia e precisamos colocar a mão na brasa.

Mas é isso Josélia, veja se consegui tirar sua dúvida (não quero ganhar de você no cansaço, hoje é sexta-feira).

Se tudo tiver certinho, vamos finalizar a questão?

Abraço e aguardo seu feedback.

Oi Flávio, obrigada! Vou prestar mais atençao quando precisar postar os códigos aqui por causa desse lance do formatador.

Sua resposta sanou minha dúvida! Ela surgiu porque em alguma das aulas eu percebi que no seu código tinha o $scope.fotos = {} ; Então pensei: porque ele quer guardar tudo em um objeto? será que é melhor que o array? Mas confesso que não me atentei a lembrar que a lista é a estrutura mais fácil em JavaScript para guardar e depois acessar os dados por conta do índice.

Agradeço suas dicas, foram muito úteis! Abraços e até mais!

solução!

Josélia, eu uso assim:

$scope.foto = {};

Mas é quando é para capturar os dados da foto. Veja que está no singular e não no plural. É "uma" foto e não várias. Nesse caso, faz sentido ser um objeto.

Será isso que você está confundindo?

Hmmmmm, pode ser, eu acho que vi isso e confundi. Mas agora ficou bem claro.

Enfim, mais uma vez obrigada!