ng-route不会发出模板请求

时间:2014-11-02 13:48:39

标签: django angularjs

我有一个django支持的角度应用,它使用angular-route来解析网址

我有一个登录系统,用户factory来验证用户的授权,如上所述here

以下是我的app.js文件的一部分

.factory('Auth', function (){
var user;
return {
    setUser : function (u)
    {
        user = u;
    },
    isLoggedIn : function()
    {
        var User = false;
        return User;
    }
}
}
)


.config(
function($routeProvider)
{
    $routeProvider
        .when('/login', {
        templateUrl : '/login',
        controller:'LoginCtrl'
        })
        .otherwise('/')
}
)

.run(['$rootScope', '$location', 'Auth', function ($rootScope, $location, Auth) {
$rootScope.$on('$routeChangeStart', function (event) {


    if (!Auth.isLoggedIn()) {
        console.log('DENY');
        event.preventDefault();
        $location.path('/login');
    }
    else {
        console.log('ALLOW');
        $location.path('/home');
    }
});
}])

我的watch也设置了MainCtrl

        $scope.$watch(Auth.isLoggedIn,
            function(value)
            {
                if(!value)
                {
                    $location.path('/login')
                }
                else
                {
                    $location.path('/home')
                }
            })

我的问题是,永远不会请求/login模板,即使我手动尝试/#/ login,也不会在控制台中出错。

此外,location.$path('/login')也未执行,因为页面在请求时保持正确 URL。但是,DENY将在控制台日志中打印出来。

我怀疑它是由app.run属性引起的,因为如果我删除了run属性,则会呈现模板。

1 个答案:

答案 0 :(得分:1)

很简单:"登录"是一个状态,如果用户没有登录,你禁止访问任何状态!

您可以更改一下,例如:

.run(['$rootScope', '$location', 'Auth', function ($rootScope, $location, Auth) {
$rootScope.$on('$routeChangeStart', function (event, toState, fromState) {
    if (!Auth.isLoggedIn() && toState == 'login' ){
        console.log('ALLOW');
    }
    else if (!Auth.isLoggedIn() && toState != 'login') {
        console.log('DENY');
        event.preventDefault();
        location.path('/login');
    }
    else {
        console.log('ALLOW');
        $location.path('/home');
    }
});

另外,如果你想在angular.js中看到一个非常完整的auth系统,请看一下: https://github.com/angular-app/angular-app/tree/master/client/src/common/security