2013-04-11 41 views
5

我有一個角色腳本,它在$ rootScope上廣播一個事件(使用$$廣播)。 角度我使用的版本是1.1.4

在某些occassions,這將引發角碼內的異常:

遺漏的類型錯誤:無法讀取屬性空的「$$ nextSibling」。

有沒有人有線索可能導致此錯誤?不幸的是,發生這種錯誤的代碼是大到可以發佈,但也許有人可以指出我在正確的方向?

在那裏發生的角的代碼是:

// Insanity Warning: scope depth-first traversal 
     // yes, this code is a bit crazy, but it works and we have tests to prove it! 
     // this piece should be kept in sync with the traversal in $digest 
     if (!(next = (current.$$childHead || (current !== target && current.$$nextSibling)))) { 
     while(current !== target && !(next = current.$$nextSibling)) { 

在while語句

更新:所述廣播是從點擊事件內excuted上的外部部件 點擊事件是一個屬性外部組件的配置對象。

+0

Ouch。我認爲代碼在摘要循環期間運行以查找所有範圍。看起來'current'沒有被定義。你是否對示波器有點奇怪?比如創建你自己的,還是手動銷燬它們? – 2013-04-11 22:07:50

+0

不是我所知...查看更新以瞭解更多關於它發生的情況的信息 – rekna 2013-04-12 05:51:20

回答

-2

問題在於使用或不使用$$適用範圍。有時我需要在應用階段使用$$應用於其他場合...... Sp最終實施了safeApply(在互聯網上的某個地方找到)。不知道爲什麼,因爲它是實現非常簡單,這不是標準的角度來實現,它簡化了編碼

+1

您可能想知道爲什麼所有的downvotes。那麼,你所說的是Angular團隊的反模式。儘管「安全適用」方法有效,但這不是合適的解決方案。你最好用$ timeout()來包裝,這樣你的代碼就可以在下一個摘要中正確應用了。看到這裏關於反模式:https://github.com/angular/angular.js/wiki/Anti-Patterns – mikesigs 2014-07-01 20:15:50

12
$timeout(function(){ 
    //do stuff 
}); 

$timeout沒有等待時間,工作也是如此。

+1

非常感謝小費! $ on(...){$ timeout(...(){myStuff();})}。經過幾個小時的挫折!這是使用角度1.0.8。 – xeor 2013-11-02 00:11:12

+0

這對我有效......謝謝.. :) – 2014-02-10 12:29:58

+0

謝謝..保存了我幾個小時的挫折我敢肯定! – 2014-02-16 20:33:47