Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/446.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在窗口侦听器函数中调用控制器函数_Javascript_Angularjs_Node.js_Addeventlistener_Fs - Fatal编程技术网

Javascript 如何在窗口侦听器函数中调用控制器函数

Javascript 如何在窗口侦听器函数中调用控制器函数,javascript,angularjs,node.js,addeventlistener,fs,Javascript,Angularjs,Node.js,Addeventlistener,Fs,我想从窗口.onbeforeunload激活关闭功能,但当我通过右键单击->关闭窗口>/code>关闭应用程序时,因此此.close()未打开(我认为是由于作用域问题) 监听器设计用于处理应用程序关闭不好的情况,但每次关闭应用程序时我都要做一些事情 this.close = function () { var _PACKAGES_FOLDER = process.env.TEMP + '/dmv/packages'; this.rmDir(_PACKAGES_FOLDER, fa

我想从
窗口.onbeforeunload
激活关闭功能,但当我通过
右键单击->关闭窗口>/code>关闭应用程序时,因此
此.close()
未打开(我认为是由于作用域问题)

监听器设计用于处理应用程序关闭不好的情况,但每次关闭应用程序时我都要做一些事情

this.close = function () {
    var _PACKAGES_FOLDER = process.env.TEMP + '/dmv/packages';
    this.rmDir(_PACKAGES_FOLDER, false);
    DataFolder.createFolder('packages');
    win.close();
}

window.onbeforeunload = function(){  
    this.close()
}
有解决办法吗

更新: 是一个node.js变量。您不能在客户端(服务端)使用它

另外,您需要
返回
一些内容,以便使用
onbeforeuload
函数,您只需执行
返回null在您的情况下

像这样:

window.onbeforeunload = function(){  
  this.close();
  return null;
}
js代码:

(function () {
    dmvMainController.$inject = ['DataFolder','$rootScope','$window'];
    function dmvMainController(DataFolder,$rootScope,$window) {
    // Starts maximized by default (set by main.js)
    var maximized = true;
    var fs = require('fs'),
    path = require('path'),
    filePath = path.join(__dirname,'/../','/../config.json');
    this.configFile = JSON.parse(fs.readFileSync(filePath, 'utf8'));


    // Remove packages folder
    this.rmDir = function (dirPath) {
        var fs = require('fs');
        try { var files = fs.readdirSync(dirPath); }
        catch (e) { return; }
        if (files.length > 0)
            for (var i = 0; i < files.length; i++) {
                var filePath = dirPath + '/' + files[i];
                if (fs.statSync(filePath).isFile())
                    fs.unlinkSync(filePath);
                else
                    this.rmDir(filePath, false);
            }
        fs.rmdirSync(dirPath);
    };

    this.close = function () {
        var _PACKAGES_FOLDER = process.env.TEMP + '/dmv/packages';
        this.rmDir(_PACKAGES_FOLDER, false);
        DataFolder.createFolder('packages');
        win.close();
    } 

    $window.onbeforeunload = function(){
    this.close();
  }
}

angular.module('dmv.core.components').
    component('dmvMain', {
        templateUrl: 'app/views/dmvMain.view.html',
        controller: dmvMainController,
    });

})();
(函数(){
dmvMainController.$inject=['DataFolder'、'$rootScope'、'$window'];
函数dmvMainController(DataFolder、$rootScope、$window){
//默认情况下启动最大化(由main.js设置)
var最大化=真;
var fs=require('fs'),
path=require('path'),
filePath=path.join(uu dirname,'/../','/../config.json');
this.configFile=JSON.parse(fs.readFileSync(filePath,'utf8'));
//删除软件包文件夹
this.rmDir=函数(dirPath){
var fs=需要('fs');
请尝试{var files=fs.readdirSync(dirPath);}
捕获(e){return;}
如果(files.length>0)
对于(var i=0;i
html:


数字制造

查看器


试试angularjs的
$window
(函数也可以将事件作为参数)不起作用(无更改)您的示例代码都是客户端代码吗?因为您不能在服务器端使用
window
,也不能在客户端使用
process.env
,这是我的客户端,如果到目前为止没有任何建议有效,则可能需要显示更多代码
<md-toolbar class="root-container">
    <div id="dmv-toolbar" class="md-toolbar-tools no-selectable" layout="row">

        <p class="no-selectable" style="font-size: 16px;">DIGITAL MANUFACTURING <strong>VIEWER</strong></p>

        <div class="draggable" flex></div>

         <md-icon class="siemens-logo" md-svg-src="app/assets/siemens_logo.svg" ng-if="$ctrl.configFile.showSiemensLogo === true"></md-icon>
        <span>
            <md-button class="md-icon-button no-outline" aria-label="Minimize" ng-click="$ctrl.minimize()">
                <md-icon class="control s-18" md-svg-src="app/assets/icon_minimize.svg"></md-icon>
            </md-button>

            <md-button class="md-icon-button no-outline" aria-label="Maximize" ng-click="$ctrl.maximize()">
                <md-icon class="control s-18" md-svg-src="app/assets/icon_maximize.svg"></md-icon>
            </md-button>

            <md-button class="md-icon-button no-outline" id="yourcontainer" aria-label="Close" ng-click="$ctrl.close()">
                <md-icon class="control s-18" md-svg-src="app/assets/icon_close.svg"></md-icon>
            </md-button>
        </span>
    </div>
</md-toolbar>

<tabs-container flex layout="column"></tabs-container>