在使用angularJS更改路径之前提交功能

时间:2015-09-02 09:30:41

标签: javascript angularjs

我想提交一个http请求,以检查每次路由更改时用户是否已登录。 这是最新版本的角度(1.4.5)。

我的路线是这样的:

// configure routes
app.config(['$routeProvider', function($routeProvider){
    $routeProvider

        // route for the home page
        .when('/', {
            templateUrl : 'directives/about.html',
            controller  : 'mainController'
        })

        // route for the home page
        .when('/login', {
            templateUrl : 'directives/login.html',
            controller  : 'loginContoller'
        })

        // route for the about page
        .when('/about', {
            templateUrl : 'directives/about.html',
            controller  : 'aboutController'
        })

        // route for the contact page
        .when('/contact', {
            templateUrl : 'directives/contact.html',
            controller  : 'contactController'
        });
}]);

3 个答案:

答案 0 :(得分:2)

如果你看the docs,你会看到when()方法需要什么参数。

route文章是一个对象,一个属性称为resolve。 resolve属性是应该解析的依赖关系的映射。

$routeProvider.when('/', {
    templateUrl: 'directives/about.html',
    controller: 'mainController',
    resolve: {
        loginCheck: function (myLoginCheckService) {
            return myLoginCheckService();//could return a $q.promise object.
        }
    }
});
  

resolve - 应该注入控制器的可选依赖关系图。如果这些依赖项中的任何一个是promise,路由器将等待它们全部被解析或者在实例化控制器之前被拒绝。如果成功解析了所有promise,则会注入已解析的promise的值,并触发$routeChangeSuccess事件。如果任何承诺被拒绝,则会触发$routeChangeError事件。

AngularJS文档

Look at the docs for more information.

答案 1 :(得分:1)

创建辅助方法

function auth(configs){
    // write your auth code here
    return configs;
}

路由器就是这样。

.when('/', auth({
        templateUrl : 'directives/about.html',
        controller  : 'mainController'
    }))

答案 2 :(得分:1)

可以通过在Angularjs

的运行块中添加routeChangeStart来实现
app.run(function($rootScope, $location) {
    $rootScope.$on( "$routeChangeStart", function(event, next, current) {
        if ($rootScope.loggedInUser == null) {
        // no logged user, redirect to /login
            if ( next.templateUrl === "partials/login.html") {
            } else {
                $location.path("/login");
            }
        }
    });
});