javascript - 在 Angular Controller 中从 webContents.send(..) 访问数据

标签 javascript angularjs electron

我是 Electron 的新手,目前正在构建一个小型应用程序,它重用了我之前构建的 Angular 应用程序中的一些代码。

这是我正在尝试做的事情:我有一个主要的 BrowserWindow(正在填充来 self 使用 angular 访问的网络服务的数据),当用户单击其中一个按钮时,我想打开另一个 BrowserWindow 并显示其中的一些数据(数据与用户点击的内容有关)。我想出了如何打开另一个 BrowserWindow 以及如何将一些参数传递给它的方法,请参见下面的代码示例。

当用户点击按钮时,这段代码被执行,一个新的 BrowserWindow 打开。

const BrowserWindow = remote.BrowserWindow;
var cubeWindow = new BrowserWindow({ width: 800, height: 600, frame: false });
var cube = path.resolve(__dirname, '../cube.html');
cubeWindow.loadURL(cube);

var data = {
  id: "1",
  name: "this"
};

cubeWindow.webContents.on('did-finish-load', ()=> {
  cubeWindow.webContents.send('cube-data', data);
})

这里我访问刚打开的 BrowserWindow 中的数据(这个 javascript 文件在 cube.html 中被引用):

require('electron').ipcRenderer.on('cube-data', (event, message) => {
    console.log(message);
});

数据对象的内容被记录在新的 BrowserWindow 中,目前一切顺利。现在回答我的问题:如何访问在 cube.html 中运行的 Angular 应用程序/ Controller 中的数据对象?

我试过这样做,但是不行:

var data;

require('electron').ipcRenderer.on('cube-data', (event, message) => {
    console.log(message);
    data = message;
});

angular.module('testApp', [])
    .controller('appCtrl', function($scope) {
        $scope.data = data;
        console.log('Data: ' + $scope.data);
    });

来自 Angular Controller 的日志条目说数据未定义,我认为这是因为在 ipcRenderer 发送/接收消息之前 Controller 实际上被评估了?

有没有办法在 Angular 中访问已发送的消息?

最佳答案

尝试将 cube-data 事件处理程序放入 Controller 代码中:

angular.module('testApp', [])
    .controller('appCtrl', function($scope) {
        $scope.model = {
            data: null
        }

        function attachCubeDataHandler() {
            require('electron').ipcRenderer.on('cube-data', (event, message) => {
                console.log(message);
                $scope.model.data = message;
            });
        }

        function initialize() {
            attachCubeDataHandler();
        }

        // Invoke initialization
        initialize();
    });

这样你首先初始化 Controller ,然后在事件响应到来时解析它。此外,如果将代码放在 Controller 中,则可以直接使用 $scope 来更新 View 的数据。我用另一个对象 (model) package 了 data 以确保在 data 对象更改时更新 View 。

关于javascript - 在 Angular Controller 中从 webContents.send(..) 访问数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41225572/

相关文章:

javascript - angular-ui-router 嵌套 View 在使用直接 url 或刷新时页面未加载

javascript - 附加到 nodejs 中的 csv 文件(使用 csv-write-stream)

javascript - ng-mouseover 和 ng-show 不起作用

javascript - 如果修改原型(prototype)会有什么不好的副作用吗?

javascript - 如何检测 AngularJS 应用程序的传入请求是 GET 还是 POST 请求?

javascript - 使用 javascript chrome 扩展触发 AngularJS 表单验证

node.js - Electron (原子壳)Module.require的源代码在哪里?

typescript - Electron JS 和 TypeScript - 在主进程中使用 TS-Node

javascript - 创建 jQuery 插件时如何使用 ES6 模块?

javascript - 获取 "message":"Admin validation failed" Mongoose 、node.js 中的错误