2017-09-05 4 views
0

Je suis nouveau à ngAnimate et j'essaye d'accomplir quelque chose de vraiment simple.AngularJS ng-show avec animation de fondu

Afficher div1 et masquer div2 lorsqu'un bouton est cliqué (j'ai réussi à le faire). Et afficher une animation de fondu quand un div quitte/montre (je n'ai pas réussi à le faire)

Et je ne veux pas montrer les deux div en même temps quand il quitte/spectacles.

J'ai préparé un JSFIDDLE

Voici le code

HTML

<body ng-controller="AniCtrl as test" > 
<div ng-app="app" ng-init="visibleDiv='div1'"> 

    <md-button ng-click="visibleDiv='div1';test.showBoxOne = !test.showBoxOne">Div 1</md-button> 
    <md-button ng-click="visibleDiv='div2';test.showBoxOne = !test.showBoxOne">Div 2</md-button> 

    <section> 
    <div ng-show="visibleDiv == 'div1'" flex> 
    <div class="box" ng-show="test.showBoxOne"> 
      <p>This is Div 1</p> 
    </div> 
    </div> 
    <div ng-show="visibleDiv == 'div2'" id="div2" flex> 
    <div class="box" ng-show="test.showBoxOne"> 
      <p>This is Div 2</p> 
      </div> 

    </div> 
    </section> 
</div> 
</body> 

JS

angular.module('app', ['ngMaterial', "ngAnimate"]); 

app.controller('AniCtrl', AniCtrl); 

function AniCtrl() { 
    var self = this; 

    self.showBoxOne = false; 
    self.showBoxTwo = false; 


} 

CSS

.box{ 
    background-color:black; 
    color:white; 
    border:1px solid red; 
} 

.box-one { 
    -webkit-transition:all linear 0.5s; 
    transition:all linear 0.5s; 
} 

.box-one.ng-hide { 
    opacity:0; 
    /* transform: scale(0.8); */ 
} 

Merci à l'avance

Répondre

0

Je pense que cela devrait être la solution. Parce que nous utilisons ng-show nous devrions inclure le CSS approprié. Aussi, vous ne pouvez pas avoir la même condition pour les deux divs, si l'un des ng-show serez

<div class="box fade" ng-show="!test.showBoxOne"> 
      <p>This is Div 2</p> 
      </div> 

    </div> 

JSFiddle Demo

HTML:

<div ng-app="sandbox" ng-init="visibleDiv='div1';test.showBoxOne=true;"> 
    <div layout="row" flex layout-align="center"> 
    <md-button ng-click="visibleDiv='div1';test.showBoxOne = !test.showBoxOne">Div 1</md-button> 
    <md-button ng-click="visibleDiv='div2';test.showBoxOne = !test.showBoxOne">Div 2</md-button> 
    </div> 
    <section layout="row"> 
    <div class="" ng-show="visibleDiv == 'div1'" flex> 
    <div class="box fade" ng-show="test.showBoxOne"> 
      <p>This is Div 1</p> 
    </div> 
    </div> 
    <div class="" ng-show="visibleDiv == 'div2'" id="div2" flex> 
    <div class="box fade" ng-show="!test.showBoxOne"> 
      <p>This is Div 2</p> 
      </div> 

    </div> 
    </section> 
</div> 

CSS:

.box{ 
    background-color:black; 
    color:white; 
    border:1px solid red; 
} 
.fade { 
    transition: all linear 1s; 
    opacity: 1; 
} 

.fade.ng-hide { 
    opacity: 0; 
} 
.ng-hide { 
    opacity: 0; 
    transition: none 0; 
} 

J'espère que cela résout votre problème!

+0

Merci beaucoup, cela fonctionne comme je le voulais. Je ne savais pas que vous deviez utiliser css pour ng-hide, c'est utile- – DPF

+0

EDIT: J'ai juste remarqué, que le ng-init ne fonctionne pas. Je veux montrer d'abord sans avoir besoin de cliquer, div1 Savez-vous pourquoi? – DPF

+0

@DPF La variable 'test.showBoxOne' n'a pas été initialisée! Pouvez-vous revérifier ma réponse? –

0

Dans votre code

<div class="box" ng-show="test.showBoxOne"> 

Vous avez pas donné boîte une classe à la div, dans lequel vous avez l'animation appliquée

.box-one.ng-hide { 
    opacity:0; 
    /* transform: scale(0.8); */ 
} 

comme correct:

 <div class="box box-one" ng-show="!test.showBoxOne"> 

C'est le violon mis à jour Your FIDDLE