4
respostas

Utilização da animação com a diretiva

Pessoal,

Percebi que ao colocar as classes col-md-2 e painel-animado dentro da diretiva que foi criada para simplificar a exibição do painel ("meu-painel"), a animação para de funcionar. Vejam o código:

<!-- código onde a animação não funciona -->
<!-- página principal index.html -->
            <div class="row">
                <meu-painel ng-repeat="foto in fotos | filter : {titulo: filtro}" titulo="{{foto.titulo}}">
                    <img class="img-responsive center-block" src="{{foto.url}}" alt="{{foto.titulo}}">
                </meu-painel>                
            </div>

<!-- template meu-painel.html -->
        <div class="panel panel-default col-md-2 painel-animado">
            <div class="panel-heading">
                <h3 class="panel-title text-center">{{titulo}}</h3>
            </div>
            <div class="panel-body" ng-transclude>
            </div>
        </div>

Se eu retirar as classes col-md-2 e painel-animado do template, colocando diretamente no elemento meu-painel, no index.html, a animação passa a funcionar:

<!-- código onde a animação funciona -->
<!-- página principal index.html -->
            <div class="row">
                <meu-painel class="col-md-2 painel-animado" ng-repeat="foto in fotos | filter : {titulo: filtro}" titulo="{{foto.titulo}}">
                    <img class="img-responsive center-block" src="{{foto.url}}" alt="{{foto.titulo}}">
                </meu-painel>                
            </div>

<!-- template meu-painel.html -->
        <div class="panel panel-default">
            <div class="panel-heading">
                <h3 class="panel-title text-center">{{titulo}}</h3>
            </div>
            <div class="panel-body" ng-transclude>
            </div>
        </div>

Por que isso acontece e de que forma eu poderia incluir essas classes no meu template?

4 respostas

Bom dia!

Por causa do bootstrap porque toda diretiva fica dentro de um elemento host e isso zua com o grid.

Segundo, não é boa prática definir o grid na diretiva porque quem usa-lo terá que usar sempre este grid o que pode quebrar o layout de quem deseja usar a diretiva.

Entendi sobre a grid, Flávio, mas quanto à classe que anima o painel? Retirei da diretiva a definição da grid, deixando apenas a classe "painel animado", no entanto, a animação também não funciona. Por quê?

Ola! Por causa da especificidade do seletor CSS.

A transição precisa ser aplicada no elemento HOST e não no HTML da diretiva, para completar a resposta. O host é o elemento do HTML que recebe o conteúdo da diretiva.