Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript ngView动画输入在第一页加载时不触发_Javascript_Angularjs_Ngroute_Ng Animate - Fatal编程技术网

Javascript ngView动画输入在第一页加载时不触发

Javascript ngView动画输入在第一页加载时不触发,javascript,angularjs,ngroute,ng-animate,Javascript,Angularjs,Ngroute,Ng Animate,几天来,我一直在努力解决我网站上的一个非常微妙的bug,但找不到任何解决方案(也许我对AngularJs的了解还不够) 我使用的是最新的angular(v1.6.1)、ngRoute和ngAnimate 问题是,当您访问网站时(当网站第一次加载时),ngView动画输入不会触发 这是我的密码: var app = angular.module('app', ['ngAnimate', 'ngRoute']); app.animation('.view', function () { ret

几天来,我一直在努力解决我网站上的一个非常微妙的bug,但找不到任何解决方案(也许我对AngularJs的了解还不够)

我使用的是最新的angular(v1.6.1)、ngRoute和ngAnimate

问题是,当您访问网站时(当网站第一次加载时),ngView动画输入不会触发

这是我的密码:

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

app.animation('.view', function () {
  return {
    enter : function (element, done) {
      alert('enter');
      done();
    },
    leave : function (element, done) {
      alert('leave');
      done();
    }
  }
});

//Config

app.config(function ($routeProvider, $locationProvider, $httpProvider){

  $routeProvider.when('/test.php',{
    template : function () {
      return "<div>Welcome to test page</div>";
    }
  });
  $routeProvider.when('/test.php/:path',{
    template : function () {
      return "<div>Inside page</div>";
    }
  });

  $locationProvider.html5Mode({enabled: true, requireBase: true});
});
enter事件会激发,但当它在缓存中或浏览器快速获取时,可能不会激发

github上有几个黑客,但我不太喜欢快速黑客,因为它们的可靠性

例如,github上提到的这种肮脏的黑客行为不再有效:

$rootElement.data("$$ngAnimateState").running = false;
我还尝试:

app.run(function($animate) {
  $animate.enabled(true);
});
但它有一种非常奇怪的行为,在狩猎中也没有帮助

这是一个


提前谢谢,我会等待你的帮助

经过几天的讨论,我们找到了一个解决方案:

首先,我们必须在app.run上启用动画(默认情况下禁用)。然后根据我们的情况,我们应该禁用身体上的动画,并直接在视图上启用它。但只要我们不能在[ng view]元素上启用动画,因为我们不能在$animate之前获得新创建的节点,我们就应该将[ng view]元素包装在容器div中

HTML:

但这还不够,因为angular会检查document.hidden,而$animation则不起作用。因此,我们必须覆盖角度函数,以便$animation始终工作(尽管这可能对动画平滑度有点危险):

就这样!希望有人会觉得它有用

$rootElement.data("$$ngAnimateState").running = false;
app.run(function($animate) {
  $animate.enabled(true);
});
<div id="view-container">
   <div class="view" ng-view></div>
</div>
app.run(function($animate) {
  $animate.enabled(true);
  $animate.enabled(document.body, false);
  $animate.enabled(document.getElementById('view-container'), true);
});
app.value('$$isDocumentHidden', function() { return false; });