更新のスタックトレースを変更すると、常にに戻りglobalZoneAwareCallback
ます。どのようにして変更のきっかけを見つけましたか?
デバッグに関しては、明確な図を用意しておくとよいでしょう。
更新のスタックトレースを変更すると、常にに戻りglobalZoneAwareCallback
ます。どのようにして変更のきっかけを見つけましたか?
デバッグに関しては、明確な図を用意しておくとよいでしょう。
回答:
globalZoneAwareCallback
は、ですべてのイベントコールバックを処理するためにzonejsで宣言された関数capture=false
です。(ところで、capture=true
あるのでglobalZoneAwareCaptureCallback
)
つまり、イベントリスナーは最初にこのメソッドを通過します。そのリスナーは、Angular、ユーザー、またはサードパーティのライブラリによってページに追加できます。
Angularでブラウザイベントをリッスンする方法はたくさんあります:
ブラウザイベントをサブスクライブする <element (event)="callback()">
@HostListener
デコレータ @HostListener('event') callback() {}
Renderer2.listen
方法
rxjs fromEvent
要素のプロパティを割り当てる element.on<event> = callback
addEventListenerメソッドelement.addEventListener(event, callback)
(このメソッドは、上記の他の多くの方法で内部的に使用されます)
中に入ると、トリガーする必要があるglobalZoneAwareCallback
すべてのゾーンタスクにアクセスできます。
click
イベントを聞いているとしましょうdocument.body
:
document.body.addEventListener('click', () => {
// some code
});
Chrome開発ツールを開いて、明確な状況を把握しましょう。
今発見したこと:
各ゾーンタスクにはソースが含まれているため、これが変更をトリガーします
ターゲットプロパティは、変更をトリガーするオブジェクトを示します
コールバックプロパティは、変更のハンドラーに導くことができます
別の例を考えて、Angularの方法でクリックイベントを追加してみましょう。
<h2 class="title" (click)="test()">Hello {{name}}</h2>
そのh2
要素をクリックすると、次のことが確認できます。
ここで、コールバックプロパティがtest
コールバックにすぐに移動せず、からのラッパーを示したことに驚くかもしれません@angular/platform-browser package
。そして、他の例も異なる場合がありますが、ZoneTask.sourceのそれはので、あなたがそのような場合に必要なすべてのプロパティは、通常は表示さあなたの変化の根本原因を。