2017-11-20 23 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>