2016-03-03 34 views
0

如何访问与我的.config文件位于同一文件的控制器中的变量?我想,如果用户当前进行身份验证登录Loading这样的观点之前:配置中的访问控制器变量

'use strict'; 

// Declare app level module which depends on views, and components 
angular.module('myApp', [ 
    'ngRoute', 
    'ngStorage', 
    'ui.router', 
    'myApp.userView', 
    'myApp.usuarios' 
]) 

.controller("MainCtrl",['$scope','$localStorage',function($scope,$localStorage) { 

    $scope.user = {} 

    $scope.save = function(u) { 
    $localStorage.user = u; 
    }; 

    $scope.load = function() { 
    $scope.user = $localStorage.user; 
    console.log($scope.user); 
    }; 

    $scope.logoff= function() { 
    $localStorage.$reset(); 
    $scope.load(); 
    }; 

    $scope.loginPage= function() { 

    var path = "/login/"; 
    window.location.href = path; 
    }; 

    $scope.load(); 


}]) 

.config(function($stateProvider, $urlRouterProvider) { 


    $urlRouterProvider.otherwise('/home'); 
    // $urlRouterProvider.otherwise('/404'); 

    $stateProvider 

    .state('userView', { 
     url: '/users_config', 
     templateUrl: 'resources/userView/userView.html', 
      controller: 'userViewCtrl', 
     resolve: { 
      security: ['$q', function($q){ 
       if($scope.user == null){ 
       $state.go("401"); 
       } 
      }] 
     } 
    }) 

    .state('404', { 
     url: '{path:.*}', 
     templateUrl: 'resources/errorView/404.html' 
    }) 

    .state('401', { 
     url: '{path:.*}', 
     templateUrl: 'resources/errorView/401.html' 
    }); 

}); 

我想访问$ scope.user在用户视图状态来决定wheneaver应该加载与否。任何指针,将不胜感激。

+0

使用[服务]( https://docs.angularjs.org/guide/services) – beaver

回答

2

这是实现登录逻辑作为Service,例如像一个很好的做法:

.factory("login_service", function ($http, $q) { 
    var isLogged = false; 

    function login(username, password) { 
     var deferred = $q.defer(); 

     $http.post("/login", { username: username, password: password }) 
      .then(function (result) { 
       if(result.data.error == 0) { 
        isLogged = true; 
        deferred.resolve(result.data); 
       } else { 
        isLogged = false; 
        deferred.reject(error); 
       } 
      }, function (error) { 
       isLogged = false; 
       deferred.reject(error); 
      }); 

     return deferred.promise; 
    } 
    function isLogged() { 
     return isLogged; 
    } 
    return { 
     login: login, 
     logout: logout, 
     isLogged: isLogged 
    }; 
}); 

所以你可以注入login_service和所有controllers使用它的方法(登录,注销,isLogged),在一个状态的resolve函数,在您的Angular应用程序的.run()方法中。

您可以在.run()最终实现登录检查的过程如下:

app.run(function ($rootScope, $state, login_service) { 

    $rootScope.$on('$stateChangeStart', function (event, toState, toParams) { 
    event.preventDefault(); 
    if (login_service.isLogged()==false) { 
     $state.go("login"); 
    } else { 
     $state.go(toState.name, toParams); 
    } 
    }); 

}); 

一些有用的链接:

2

不能,$ scope是在状态解决后创建的。

请使用存储您当前用户的服务或使用$ rootScope。

相关问题