2016-10-20 13 views
0

私はAngularJSで書かれたElectron Appで作業しています。電子アプリのメインプロセスでは、私はDownloadItemイベントを待ち受けています。したがって、ユーザーがファイルをダウンロードするたびに、イベントが発生します。私のMain.jsには、次のコードがあります。物事の角度側に 独自のコントローラ内の角度ハンドルイベント

win.webContents.session.on('will-download', (event, item, webContents) => { 
    item.once('done', (event, state) => { 
    if (state === 'completed') { 
     win.webContents.send('download-message', 'completed', item.getSavePath()); 
    } else if (state === 'interrupted') { 
     win.webContents.send('download-message', 'failed'); 
    } 
    }) 
}); 

、私は(アプリケーションの開始点を表して)「メイン」コントローラーでこのようなイベントを待っています。だから、ここで私はこのようになりますいくつかのコードを持っている:これはうまく動作しますが、それは一種の醜いメインアプリケーションコントローラでこれらのイベントのすべてを処理するために感じている

const { ipcRenderer } = require('electron'); 
ipcRenderer.on('download-message', function (event, method, filepath) { 
    if (method === 'completed') { 
    // Do something interesting 
    } else if (method === 'failed') { 
    // Do something interesting 
    } 
}); 

。私はそれを独自のコントローラ(例えばdownloadController)に分けたいと思います。

私は、このイベントを独自のサービス(たとえばdownloadsService)で聞くことを考えましたが、私はアプリケーションのビュー(たとえば、いくつかの成功/失敗メッセージを表示する)を操作したいので、これはこの機能の適切な場所になります。

私はこの機能を特定のコントローラに分ける良い方法を探しています。

多分Angularとそのコントローラの概念を理解できないかもしれないので、アドバイスが本当に役に立ちます。

ありがとうございます!

答えて

1

ビューを変更するために使用されるコントローラーでイベントを処理できます。イベントを処理するコントローラが$ scopeを共有し、コントローラがイベントをトリガしていることを確認してください。

Angularイベントをトリガするときは、$ emitまたは$ broadcastを使用できます。

$scope.$emit(name, args); 

は、スコープ階層内でイベントを上向きに送信するので、親コントローラがあれば、イベントについて聞きます。 $ブロードキャストは、イベントを下向きに送信します。ただし、コントローラがすべて同じ階層レベルで登録されている場合は、$ rootScopeを使用する必要があります。

$ rootScopeまたは$ scopeのどちらを使用する場合でも、イベントを受信して​​いるコントローラとイベントをトリガしているコントローラに注入してください。

+0

ありがとうございました。尋ねる前にドキュメントを読んでいるはずです。 – Founded1898

関連する問題