我使用的JavaScript命令:setInterval的。 我喜欢在用户离开页面时停止它。
此代码似乎运作良好: http://jsfiddle.net/PQz5k/
当用户离开页面它能检测。 它执行Javascript代码当链接用户点击去一个不同的HTML页面或URL,或者如果用户重新加载页面。
然而,当我从一个AngularJS模板去到另一个它不工作。 举个例子,如果我在template1.html,我想Javascript代码做一些Controller1.js当用户离开template1.html去template2.html。 什么是下面这段代码在AngularJS相当于?:
$(window).on('beforeunload', function() {
return 'Your own message goes here...';
});
我认为你有两个控制器,一个像这样每个模板:
function Controller_1($scope...){
...
}
function Controller_2($scope...){
...
}
那么,当你从一个模板切换到另一个有是一个的燃煤名为$摧毁一个事件,您可以在这里读了它http://docs.angularjs.org/api/ng.$rootScope.Scope#$destroy
比方说,我从Controller_1模板与Controller_2的模板转换。 Controller_1有我想停止的时间间隔。 你可以做到这一点:
function Controller_1($scope, $interval...){
var myInterval = $interval(...);
$scope.$on("$destroy", function(){
$interval.cancel(myInterval);
});
}
这将意味着当Controller_1在$范围被破坏,该事件将被调用,而间隔将被清除。
这是当你离开一个模板(也提示确认对话框)为:
function Controller_1($scope...){
var myInterval = setInterval(...);
$scope.$on('$locationChangeStart', function (event, next, current) {
console.log(current);
if (current.match("\/yourCurrentRoute")) {
var answer = confirm("Are you sure you want to leave this page?");
if (!answer) {
event.preventDefault();
}else{
clearInterval(myInterval);
}
}
});
}
如果你正在使用的用户界面,路由器,那么你可以使用的OnExit,财产
$stateProvider.state('foo', {
url: '/foo',
templateUrl: 'views/foo.html',
controller: 'fooController',
onExit: ['$fooService', function($fooService) => {
$fooService.hide();//do what u want to do here
}]
});
您可以使用一个观察者检查时位置路径改变了,是这样的:
$scope.$watch(function(){
return $location.path();
}, function(newPath, oldPath){
//...Do something
})
然后,你可以得到原来的位置,而新的位置,并执行任何你想要的功能,或