在自己的控制器中的角度手柄事件

在自己的控制器中的角度手柄事件

问题描述:

我正在研究用AngularJS编写的电子应用程序。在Electron应用程序的主流程中,我正在监听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 
    } 
}); 

这只是正常,但感觉那种丑陋来处理所有的主要的应用程序控制器,这些事件。我想将它分离到它自己的Controller(例如downloadController)。

我想过要在它自己的服务(例如downloadsService)中监听这个事件,但是因为我想操作应用程序的视图(例如显示一些成功/失败的消息),我不认为这会是这个功能的正确位置。

所以,我正在寻找一种很好的方式将此功能分离到特定的控制器。

也许我只是不太了解Angular及其控制器的概念,所以任何建议都会非常有帮助。

在此先感谢!

您可以处理无论哪个控制器用于修改视图的事件。您只需确保处理事件的控制器与触发事件的控制器共享$ scope。

当您触发Angular事件时,您可以使用$ emit或$ broadcast。调用

$scope.$emit(name, args); 

将在作用域层级向上发送事件,所以如果你有一个父控制器,它会听到有关事件。 $ broadcast向下发送事件。但是,如果您的控制器全部注册在相同的层级上,则必须使用$ rootScope。

无论您使用$ rootScope还是$ scope,请确保将其注入监听事件的控制器以及触发事件的控制器。

+0

谢谢。在问之前应该已经通过了文档。 – Founded1898