2015-05-20 7 views
11

मैं एक समारोह निष्पादित करने के लिए जब उपयोगकर्ता अनुप्रयोग बंद कर देता है, लेकिन निम्नलिखित बातों पर विचार करने की जरूरत है की जरूरत का उपयोग कर विंडो बंद पर एक समारोह को गति प्रदान करने:कैसे AngularJS

  • मैं एक service के एक समारोह निष्पादित करने के लिए की जरूरत है , फिर ...
  • ... बाहर scoped शुद्ध जावास्क्रिप्ट आधार पर कार्य नहीं यहाँ उपयोगी होने की संभावना है
  • मैं मार्गों का उपयोग कर रहा है, एक scoped onLocationChangeSuccess बाध्यकारी साथ ही बेकार है

इसलिए इस समाधान काम करने के लिए नहीं जा रहा है: https://stackoverflow.com/a/18355715/773595

क्योंकि यह हर ट्रिगर किया जाएगा स्थान परिवर्तन, लेकिन मैं क्या जरूरत केवल एक ही है ट्रिगर जब टैब/विंडो बंद कर दिया है।

+0

क्या आप हमें कोड का कुछ टुकड़ा दिखा सकते हैं जिसकी आपने कोशिश की? – forgottofly

उत्तर

11

आप अपने नियंत्रक/निर्देश में एक ऑनबेरनलोड पंजीकृत कर सकते हैं तो आपके पास दायरे तक पहुंच होगी। एक सेवा के मामले में मैं इसे angular.run जीवन चक्र में पंजीकृत करूँगा।

angular.module('app', []) 
 
    .controller('exitController', function($scope, $window) { 
 
    $scope.onExit = function() { 
 
     return ('bye bye'); 
 
    }; 
 

 
    $window.onbeforeunload = $scope.onExit; 
 
    });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<div ng-app="app" ng-controller="exitController"> 
 
    <a href="http://www.disney.com">Leave page</a> 
 
</div>

+0

जो अपेक्षित के रूप में काम किया! धन्यवाद – user544262772

+1

यदि आपको इस फ़ंक्शन को दृश्य से भी कॉल करने की आवश्यकता नहीं है तो आपको दायरे के सार्वजनिक नामस्थान को प्रदूषित करने की आवश्यकता नहीं है। उपयोगकर्ता 4919812 का समाधान देखें। – vsp

+0

ब्राउज़र बंद करने और रीफ्रेश के बीच आप अंतर कैसे कर सकते हैं? – Ben

6

मुझे लगता है कि आप $ विंडो का उपयोग कर सकते हैं खिड़की बंद पर देशी जावास्क्रिप्ट घटना बाध्य करने के लिए उदा

app.controller('myCtrl', ['$window', '$myService', function ($window, $myService) { 
    $window.onbeforeunload = function (evt) { 
    $myService.onclose(); 
    } 
}]); 
+1

व्हाउप्स, माइकल उत्तर और मेरा जैसा दिखता है –

+0

दुर्भाग्यवश, यह विधि कुछ ब्रॉवर्स (यानी फ़ायरफ़ॉक्स) पर एक चेतावनी ट्रिगर करेगी। – aguadoe

-3

यह काम करता है?

ऑनबेरनलोड, न केवल विंडो बंद होने पर ट्रिगर होता है, तब भी होता है जब उपयोगकर्ता विंडो को ताज़ा करता है (ctrl + f5)। और यदि आप $ window.onunload का उपयोग करते हैं, तो फ़ंक्शन कभी निष्पादित नहीं किया जाएगा क्योंकि फ़ंक्शन के कोड को निष्पादित करने से पहले विंडो बंद हो जाएगी।