2015-04-22 102 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