0

我试图通过我的控制器触发 ngShow,它可以工作,但它没有使用我需要获得淡入淡出转换的 ngAnimate 类。

如果我使用按钮来切换 ngShow,它的工作原理就像它应该的那样,但如果我以编程方式切换它则不会。这是预期的行为吗?我可以绕过它吗?

Plunk: http ://plnkr.co/edit/swJDP1KBBxcRfK9auYPs?p=preview

  <body ng-controller="MainCtrl">
    <input type="checkbox" ng-model="visible">
    <div ng-show="visible" class="wrap" role="document">
      Hello
    </div>
  </body>

 

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

app.run(function($rootScope) {
  $rootScope.visible = false;
});

app.controller('MainCtrl', function($rootScope, $scope) {
  $rootScope.visible = true;
});

 

.wrap.ng-hide-add-active {
  display: block!important;
  transition: 0.5s ease-in-out all;
}

.wrap.ng-hide-remove-active {
  display: block!important;
  transition: 0.5s ease-in-out all;
  transition-delay: 0.5s;
}

.wrap.ng-hide {
  opacity: 0;
}
4

1 回答 1

0

您正在运行块,并且控制器代码可能会在同一个摘要周期中执行,因此 Angular 不会看到visible变量发生变化。如果您将控制器代码置于超时状态,这将起作用。例如

app.controller('MainCtrl', function($rootScope, $scope, $timeout) {
  $timeout(function() {
    $rootScope.visible = true;
  });
});

http://plnkr.co/edit/5IhGE3ol5kI64OlT1e8v?p=preview

于 2015-06-23T14:15:57.770 回答