🅰️
AngularJSの$broadcastはどのように引数を$onに渡しているのか
@armorik83です。毎日AngularJSをモリモリ書いてます。
broadcastから onへの引数渡し
AngularJSでは、最近は専ら$broadcast#と$onしか使っていません。この辺についてはまた後日書く予定にしています。その$broadcast、どういう風に値を渡しているのか気になったので、念のため調べてみました。
ここです。1.3.14時点のソースを読んでいきます。
var listenerArgs = concat([event], arguments, 1),
listeners, i, length;
L1231のconcatはAngularJS側の独自のUtilityのようで、実装はここです。$broadcast()の第1引数はnameなので、arguments, 1で第2引数以降のすべてと[event]を結合しています。このあとL1248で、
listeners[i].apply(null, listenerArgs);
しています。listeners[i]は$on()内で発火しますが、その時の引数が$broadcast内で事前に束縛されるというわけです。
参照渡しでした
argumentsをapplyしているだけなので、なんの変わったこともしていません。ご安心ください!
以上です。
Discussion