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>