从配置

时间:2016-03-03 07:33:34

标签: angularjs

如何访问控制器中与我的.config位于同一文件中的变量?我正在尝试验证用户当前是否在登录之前加载了这样的视图:

'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'
    });

});

我想在userView状态下访问$ scope.user来决定是否应该加载它。任何指针都会受到赞赏。

2 个答案:

答案 0 :(得分:2)

您无法在解决状态后创建$ scope。

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

答案 1 :(得分: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并在controllersresolve状态的.run()函数中.run()中使用其方法(登录,注销,isLogged)你的Angular app的方法。

您最终可以在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); } }); }); 中执行登录检查,如下所示:

{{1}}

一些有用的链接: