2015-04-22 100 views
2

我正在开发一个企业Angular应用程序,用于测试的Ruby PageObject。我们遇到的问题是,有时会出现$间隔,我们已经启动了导致随机故障的$摘要。我正在尝试写一个Javscript命令,页面对象可以执行以查看$摘要是否正在运行。要做到这一点,我想出了以下...

angular.element("#application").injector().get('$rootScope').$$phase 

这似乎是工作,但是,我想create a plunker to demonstrate问题,但是,这plunker不会从$消化改变。但是,当我添加以下内容...

$timeout(function() { 
     console.log("phase is "+$scope.$root.$$phase); 
}) 

我看到它变成了空,所以我如何显示在UI中?

+1

为什么你要在$间隔内强制$摘要?只有在知道角度生命周期以外的事情发生变化时,您才需要执行$ apply。所有以'$$'开始的值都是内部值,绝不能在实时应用程序中使用。 – Enzey

+1

观察者将始终在同一阶段被调用。所以价值永远是一样的。 – zeroflagL

+0

@Enzey吧?超时不会强制它正在等待摘要完成的摘要。这就是为什么在超时内阶段为空。至于$$,这是测试内部而不是应用程序本身,测试抓取DOM元素并使用它的注入器来获取$ rootScope。这不会是什么包括在最终的来源 – Jackie

回答

0

AFAIK您可以在UI上显示$root.$$phase值,但它总是只显示为$digest,它永远不会显示为null。由于Angular为每个50ms运行摘要循环以更新所有数据绑定,因此您需要查看Databinding in AngularJS

+0

谢谢,但情况并非更新数据绑定,而是为了避免陈旧的状态异常,它会在发生时告诉单独的(我们的例子中为ruby测试套件)测试应用程序。此外,由于摘要周期只需要50ms,为什么我看不到它是空的而不是看到它卡在$ apply上。请使用plnkr来尝试获取我所指的内容(基本上在按钮单击它变为null之后,我希望它在启动后也能像这样)。 – Jackie