当用户点击F5或刷新按钮时我需要在刷新页面之前调用一个函数,我尝试了下面的代码并且它确实有效,请告诉我我做错了什么并且在那里一个更好的方法来做到这一点。 我使用Anuglar 1.5和ui-router。
angular.module('module.name', [
]).controller('someController',['$scope', function($scope) {
$scope.$on("$stateChangeStart", function () {
functionToCallOnPageRefresh();
});
}]);
在页面刷新时没有调用functionToCallOnPageRefresh()。
答案 0 :(得分:0)
你需要创建一个像'secure'这样的父状态,并继承你的应用程序中的每个状态,如下所示 -
angular.module('moduleName').config(['$stateProvider', '$urlRouterProvider',
function ($stateProvider, $urlRouterProvider) {
$stateProvider.
state('secure', {
url: "/",
abstract: true,
templateUrl: "/path/to your/ master page",
resolve: {
factory: 'CheckRouting'
}
}).
state('dashboard', {
url: 'dashboard',
templateUrl: 'path/to your /template',
parent: 'secure',
});
}
]);
这里我提到了
resolve: {
factory: 'CheckRouting'
}
其中CheckRouting
内部解析属性,是一个工厂,它将在状态更改时执行某项任务(检查用户是否登录)或按f5。
在'secure'状态下使用'resolve'属性执行函数如果用户按f5或状态改变如as-
(function() {
'use strict';
angular.module('moduleName').factory('CheckRouting', ['$rootScope','$timeout' checkRouting]);
function checkRouting($rootScope,$timeout) {
if ( condition) { //user is loged in
return true;
} else {
$timeout(function() {
$state.go('login');
});
return false;
}
}
}());