Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/401.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.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 计数角度';新元摘要周期 tl;博士:_Javascript_Angularjs_Animation_Cycle_Digest - Fatal编程技术网

Javascript 计数角度';新元摘要周期 tl;博士:

Javascript 计数角度';新元摘要周期 tl;博士:,javascript,angularjs,animation,cycle,digest,Javascript,Angularjs,Animation,Cycle,Digest,我想有角度触发css动画页面加载。有没有办法计算angular在控制器或指令中的摘要周期 长版本: 我有一些角度动画,我想在页面加载时运行,使用ng enter、ng LEVE、ng move等等。。。使用ng repeat指令 从1.3.6开始,我知道angular会等待应用任何动画,直到出现2个摘要周期之后,所以这些动画根本不会发生,因为数据(几乎总是)在我的应用程序的第一个摘要周期加载到视图中。 (沙司:) 我想知道是否有某种方法可以计算摘要周期,或者触发动画,或者在第二个摘要周期后加载

我想有角度触发css动画页面加载。有没有办法计算angular在控制器或指令中的摘要周期


长版本: 我有一些角度动画,我想在页面加载时运行,使用ng enter、ng LEVE、ng move等等。。。使用ng repeat指令

从1.3.6开始,我知道angular会等待应用任何动画,直到出现2个摘要周期之后,所以这些动画根本不会发生,因为数据(几乎总是)在我的应用程序的第一个摘要周期加载到视图中。 (沙司:)

我想知道是否有某种方法可以计算摘要周期,或者触发动画,或者在第二个摘要周期后加载数据

另外,如果我等到2个摘要周期,是否存在第二个周期在某些情况下不会发生的风险,这意味着我的数据不会加载到视图中?如果是这种情况,是否有一种方法可以保证每次至少发生2个消化循环

作为临时修复,我使用$timeout在500毫秒后加载数据,但我知道这是一个非常糟糕的主意


相关代码: (由于本项目的保密协议,更改了某些事物的名称)

html: js: 正如报告中指出的那样:

如果希望在调用$digest时收到通知,可以注册一个不带侦听器的watchExpression函数。(由于当检测到更改时,watchExpression可以在每个$digest循环中执行多次,因此请准备好多次调用您的侦听器。)

因此,您可以使用以下代码计算
$digest

var nbDigest = 0;

$rootScope.$watch(function() {
  nbDigest++;
});

更新:关于为什么不能依赖HTML的说明,如果您查看您的开发控制台,您将看到无法结束Diget周期(10个周期后中止)的抱怨

angular.module(“测试”),controller(“测试”,函数($scope){
$scope.digestCount=0;
$scope.incrementDigestCount=函数(){
返回+++$scope.digestCount;
}
});

{{incrementDigestCount()}}

计算摘要周期可能与超时一样糟糕,IMHO。。。发布一些代码,这样我们可以找到更好的解决方案。为什么这是个坏主意?演出优雅?AngularJS版本?使用ng view?我已经说过我在使用1.3.6和ng repeat(ng repeat)了^这是什么
超时
功能,是angular的
$timeout
服务还是
设置超时
的包装器?(我在你的代码中没有看到$setTimeout)如果你直接使用
setTimeout
,它不会导致像
$timeout
那样的
$digest
。但是如果每个digest都多次调用观察器,这不是一种不可靠的统计摘要周期的方法吗?还有,@Andy的解决方案不是更有效,因为它只在作用域上设置了两个变量,一个整数和一个函数,而不是一个整数和一个观察者?当使用花括号
{expression}
时,隐式创建了表达式的观察者。在核心上,我们的解决方案做的完全相同,但他的方案暗示了不需要的html,因此我的解决方案实际上更高效,因为我保存了DOM刷新。至于您最初的问题,rootScope上的这个观察程序将在每个摘要周期执行一次。这是官方推荐的对发生的摘要周期数量进行基准测试的方法,参见文档。事实上,他的解决方案无法工作:我将对此进行评论,以解释原因。@floribon如果每个摘要多次调用观察者,这不是一种不可靠的统计摘要周期的方法吗?
.za {
  //other styles

  &.ng-enter,
  &.ng-leave,
  &.ng-move {
    transition: all 1s $slowOut;
    transform: translate(1000px, 0px) rotateZ(90deg);
  }
  &.ng-enter,
  &.ng-leave.ng-leave-active
  &.ng-move, {
    transform: translate(1000px, 0px) rotateZ(90deg);
  }
  &.ng-enter.ng-enter-active,
  &.ng-leave,
  &.ng-move.ng-move-active {
    transform: translate(0, 0) rotateZ(0deg);
  }
  &.ng-enter-stagger,
  &.ng-leave-stagger,
  &.ng-move-stagger {
    transition-delay: 2s;
    transition-duration: 0s;
  }
}
// inside a controller
timeout(function() {
  scope.pizza = [ // actually injecting 'myData' and using `myData.get()` which returns an array of objects
    {toppings: ['cheese', 'formaldehyde']},
    {toppings: ['mayo', 'mustard', 'garlic']},
    {toppings: ['red sauce', 'blue sauce']}
  ];
}, 500);
var nbDigest = 0;

$rootScope.$watch(function() {
  nbDigest++;
});