vue プロジェクトでは、コンポーネント間の通信を管理するためにグローバル イベント バスを使用することがあります。 vue2 プロジェクトでは、$emit
、$on
、および $off
を使用して、vue3 の eventHub
; ## をカプセル化できます。 #$on と
$off が削除され、mitt ライブラリまたは tiny-emitter ライブラリを使用できます。ノードには、イベントの監視と発行に役立つイベント モジュールが組み込まれているため、それほど面倒な作業は必要ありません。
EventEmitter クラスをインポートし、次にインスタンス
emitter を生成します。 (
EventEmitter は非常に重要です。たとえば、後続の記事で紹介する
stream は
EventEmitter のインスタンスです):
const EventEmitter = require('events') const emitter = new EventEmitter()
emitter .on() を使用してイベントを監視します。渡される最初のパラメータはイベント名です。2 番目のパラメータは、発行されるイベントをリッスンした後に実行されるコールバックです。イベントを発行するときにパラメーターが渡されます。コールバック関数の場合は、1 つずつ取得することも、次のように
関数の残りのパラメーターを使用することもできます。 [推奨関連チュートリアル: nodejs ビデオ チュートリアル, プログラミング教育]// 监听事件
emitter.on('test', (...args) => {
console.log(args) // [ 1, 2, 3 ]
})
// 发射事件
emitter.emit('test', 1, 2, 3)
: を使用できます。 <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:js;toolbar:false;">emitter.once(&#39;test&#39;, () => {
console.log(&#39;监听到了事件发射&#39;)
})
emitter.emit(&#39;test&#39;)
emitter.emit(&#39;test&#39;) // 本次发射不会触发打印</pre><div class="contentsignin">ログイン後にコピー</div></div>
次の例に示すように、イベントを監視する場所が複数ある場合イベントが発行されると、リスニング コールバックが順番にトリガーされます:
emitter.on('test', () => { console.log('监听到了事件发射,1') }) emitter.on('test', () => { console.log('监听到了事件发射,2') }) emitter.emit('test')
実行結果:
リッスン イベントを前面に追加したい場合は、
emitter.prependListener() (または emitter.prependOnceListener()
) を使用できます。事前にリッスンしますが、一度だけリッスンします): <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:js;toolbar:false;">emitter.on(&#39;test&#39;, () => {
console.log(&#39;监听到了事件发射,1&#39;)
})
emitter.prependListener(&#39;test&#39;, () => {
console.log(&#39;监听到了事件发射,2&#39;)
})
emitter.emit(&#39;test&#39;)</pre><div class="contentsignin">ログイン後にコピー</div></div>
現在の結果は次のとおりです:
(または emitter.removeListener ()
) を使用してイベントの監視を削除できますが、対応するイベント名とコールバックを渡す必要があります。したがって、監視時のコールバックは、上記のように emitter.on()## で直接定義できません # 内部。外部で定義し、コールバックへの参照を渡す必要があります:
function handler(...args) { console.log(args) // [ 1, 2, 3 ] } emitter.on('test', handler) emitter.emit('test', 1, 2, 3) emitter.off('test', handler) emitter.emit('test', '无法被监听到')
emitter.off() 削除できるリスナーは 1 つだけであり、リスナー コールバックを渡す必要があります。複数のリスナーがあり、それらをすべて削除したい場合は、emitter.removeAllListeners() を使用できます。 :
emitter.on('test', handler) emitter.on('test', handler) emitter.on('test', handler) emitter.removeAllListeners()
emitter.removeAllListeners()パラメータが渡されない場合は、すべてのイベント名のすべてのイベント リスナーを削除します。イベント名を渡すこともでき、そのイベント名に対応するすべてのイベント リスナーが削除されます。 その他のメソッド
1 EventEmitter オブジェクト、イベント名の最大リスナー数のデフォルトは 10 です。これは、emitter.getMaxListeners()
:console.log(emitter.getMaxListeners()) // 10
で確認できます。たとえば、11 回と書かれています。
emitter .on('test ', handler) を実行すると、エラーが報告され、emitter.setMaxListeners() を使用して最大制限を増やすよう求められます:
現在の EventEmitter オブジェクト上の特定のイベント名にリスナーがいくつあるか、およびそれが最大制限を超えているかどうかを知りたい場合は、emitter.listenerCount()
を使用して、表示するイベント名を渡します:console.log(emitter.listenerCount('test'))
イベント名とリスナーを取得しますUse emitter.eventNames()
現在の EventEmitter オブジェクトに登録されているすべてのイベント名と、イベント文字列で構成される返された配列を取得するには:emitter.on('test1', handler) emitter.on('test2', handler) console.log(emitter.eventNames()) // [ 'test1', 'test2' ]
イベントに対応するすべてのリスナーを取得したい場合は、
emitter.listeners を使用できます。 () を入力し、イベント名を渡します: function handler1() {} function handler2() {} emitter.on('test', handler1) emitter.on('test', handler2) console.log(emitter.listeners('test'))
得られた結果は次のとおりです:
ノード関連の知識の詳細については、次のサイトを参照してください。 : nodejs チュートリアル
!以上がNodeのイベントモジュールの簡単な分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。