ngAnimate在ngShow上.第一次启动时防止动画

iLe*_*ing 14 angularjs ng-animate

我正在玩最近添加的angular.js动画功能,这不能按预期工作

<style>
    .myDiv{
        width:400px;
        height:200px;
        background-color:red;
    }
    .fadeIn-setup,.fadeOut-setup {
      -webkit-transition: 1s linear opacity;
      -moz-transition: 1s linear opacity;
      -o-transition: 1s linear opacity;
      transition: 1s linear opacity;
    }
    .fadeIn-setup{
      opacity:0;
    }
    .fadeOut-setup{
      opacity:1;
    }
    .fadeIn-setup.fadeIn-start {
      opacity: 1;
    }
    .fadeOut-setup.fadeOut-start{
        opacity:0;
    }
</style>

<div ng-app>
    <div ng-controller='ctrl'>
       <input type='button' value='click' ng-click='clicked()' />  
       <div ng-show="foo == true"  class='myDiv' ng-animate="{show: 'fadeIn', hide:'fadeOut'}">
       </div>
     </div>
</div>

function ctrl($scope){
    $scope.foo = false;
    $scope.clicked = function(){
       $scope.foo = !($scope.foo);
    }
}
Run Code Online (Sandbox Code Playgroud)

http://jsfiddle.net/Kx4TS/1

它会破坏myDiv dom.ready并开始消失.而它最初应该被隐藏.如何解决?

小智 40

到目前为止1.2.22仍然存在这个问题.但是,其中一种解决方案很容易解决.

在尝试了这里提到的所有解决方案之后,我想特别强调cocoggu对ac360的建议,因为它是迄今为止最简洁的并且它"正常工作".

正如他所建议的那样,只需将ng-hide类添加到违规元素即可立即解决问题. - 它可以防止初始动画故障并允许所有后续动画按预期运行.

工作解决方案感谢cocoggu

<div id="offending-element" class="ng-hide"></div>


orj*_*jan 10

我找到了2种不同的解决方案来解决您的问题

最简单的解决方案:为div style ="display:none"添加内联样式

另一个解决方案是使用ng-class ="state"向div添加一个初始类, 并在单击该按钮时重置该类

function ctrl($scope){
    $scope.state = 'hide';
    $scope.foo = false;
    $scope.clicked = function() {
       $scope.state = undefined;  
       $scope.foo = !($scope.foo);
    }
}
Run Code Online (Sandbox Code Playgroud)

连同以下css:

.hide {
    display: none;
} 
Run Code Online (Sandbox Code Playgroud)

我想我会使用第一个也是最简单的解决方案


mat*_*sko -1

现在这个问题已经得到解决。升级到1.1.5。

  • @ac360您可以在元素上手动添加 ng-hide 类以在 init 时隐藏它 (24认同)
  • 这在 1.1.5 中仍然存在 (4认同)