2017-11-20 26 views
0

window.onbeforeunloadから閉じる関数を有効にしたいが、'right click' -> 'close window'でアプリケーションを終了すると、this.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() 
} 

すべてのソリューションを閉じるがありますか?

+0

トライangularjsの '$のwindow'は(関数は、パラメータとしてイベントがかかる場合があります) –

+0

は機能しません(変更なし) –

+0

すべてのサンプルコードクライアントサイドコードはありますか?サーバー側で 'window'を使用することはできませんし、クライアント側で' process.env'も使用しません。 – Sven

答えて

1

更新: process.envはnode.js変数です。クライアント側(配信側)で使用することはできません。

また、機能を使用するには、return何かが必要です。ちょうどreturn null;をあなたのケースで行うことができます。

ので、同様:

window.onbeforeunload = function(){ 
    this.close(); 
    return null; 
} 
+0

まだ動作していない、関数はまだ呼び出されていません –

0

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, 
    }); 

})(); 

HTML:代わりに

<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> 
関連する問題