2017-11-05 5 views
4

私はどのように学習しているのですかngZoneで動作します。角度はです。 標準の非同期操作(setTimeoutなど)のサルのパッチ適用がわかっています。ngZoneまたはzone.js:猿のパッチの場所?

しかし、誰が猿のパッチを当てていますか? zone.jsライブラリまたはngZone内のAngular自体? ソースコード内で特定の場所を表示できるのは素晴らしいことです。

答えて

2

Angularはzone.js内のゾーンを実行し、zone.jsはパッチされたAPIをスコープとして提供します。

自分でzone.run(...)をAngularのものなしで使用して、パッチ適用されたAPIのすべての効果を得ることができます。

も参照してくださいhttps://github.com/angular/zone.js/

ゾーンライブラリは、ブラウザとサーバー側のプロジェクトの両方で動作するように持っているタイマー https://github.com/angular/zone.js/blob/master/lib/common/timers.ts#L22

+0

だからsetTimeoutOriginal!== setTimeout? zone.jsの特定の場所が見つかりませんでした。私に回線を提供できますか? –

+0

@StepanSuvorovゾーンがロードされた後は元のメソッドを取得できません。それは私がオリジナルを手に入れるためのAPIを見たことがないので、ゾーンの内部にあるだろう。 – cgTag

+0

@StepanSuvorov私の更新された答えを見てください。 –

1

をパッチコード。ですから、単にグローバル関数にパッチを当てるよりも少し複雑です。

ゾーンは、グローバルAPIにパッチを当てるだけでなく、ブロードキャストされるイベントオブジェクトにもパッチを適用します。パッチはZone.__load_patchで実行され、これらのモジュールで何がパッチされているかを確認できます。

https://github.com/angular/zone.js/blob/master/lib/browser/browser.ts

https://github.com/angular/zone.js/blob/master/lib/node/node.ts

https://github.com/angular/zone.js/blob/master/lib/rxjs/rxjs.ts

それは明らかに単純なプロセスではないのです。ゾーンにパッチが適用されていないエッジケースがまだあると確信しています。

関連する問題