19

自分のスコープを破棄すると、プログラムでこのエラーが発生し続けます。angular内のこのwhileループまで追跡しました:

if (!(next = (current.$$childHead || (current !== target && current.$$nextSibling)))) {
    while(current !== target && !(next = current.$$nextSibling)) {
        current = current.$parent;
    }
}

また、jsFiddle でそれを複製することもできました: http://jsfiddle.net/kEyqz/1/

設定は非常に簡単です。要素にクリック イベントを接続し、クリックされたことを $broadcast し、続いて $apply を実行します。

別のディレクティブ (子スコープを使用) でそのイベントをリッスンし、それが表示された場合は子スコープを破棄します。これを行うと、次のエラーが発生します。

Uncaught TypeError: Cannot read property '$$nextSibling' of null 

これは、コードで達成しようとしていることのほんの一例です。

current = current.$parent の直前にコンソール ログを記録すると、スコープには $parent がありません (null に設定されます)。

次の行を追加できます。

if(!current){
    break;
}

current = current.$parent の後、角度バージョンを切り替えると維持する必要があります (理想的ではありません)。

4

1 に答える 1

23

これはあなたが探していたものですかhttp://jsfiddle.net/jw99Lj7t/ ?

あなたはダージンサイクルを行っていました-それがエラーの原因でした$destroy.$scopedigest

これがサイクルの実装bug方法であるため、これが.digest$scopes

この問題を解決すると、多くの複雑さが生じる可能性があり、digest非常に高速でなければならないため、実行していることに別の方法を見つけることをお勧めします。

于 2013-09-10T22:28:10.223 に答える