在刷新页面之前调用函数

时间:2016-04-22 04:15:59

标签: javascript angularjs angular-ui-router

当用户点击F5或刷新按钮时我需要在刷新页面之前调用一个函数,我尝试了下面的代码并且它确实有效,请告诉我我做错了什么并且在那里一个更好的方法来做到这一点。 我使用Anuglar 1.5和ui-router。

angular.module('module.name', [
]).controller('someController',['$scope', function($scope) {
    $scope.$on("$stateChangeStart", function () { 
        functionToCallOnPageRefresh();
    });
}]);

在页面刷新时没有调用functionToCallOnPageRefresh()。

1 个答案:

答案 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;

        }
    }
}());