2014-09-12 5 views
0

Я новичок в угловых js. Я хочу сделать аутентификацию. Я должен направить некоторые страницы только после проверки подлинности. Для этого у меня есть функция checkLogin. При вызове этой функции checkLogin требуется некоторое время обработки. Если true перенаправляет соответствующую страницу. Если false остается на той же странице. Но при одновременном вызове функции checkLogin он обрабатывает функцию app.config одновременно. Мне нужно заблокировать его. Я должен обработать это только после chcklogin.Как избежать асинхронной обработки в угловых js

var app = angular.module('myApp', ['ngRoute', 'ngResource','ngCsv', 'ui', 'ngSanitize', 'ngQuickDate', 'ui.tree', 'blueimp.fileupload','mentio']); 
app.config(function($routeProvider) { 
$routeProvider 
    .when('/', { 
     templateUrl: 'app/views/login.html', 
     controller: 'LoginController', 
     title: 'Login' 
    }).when('/signup', { 
     templateUrl: 'app/views/signup.html', 
     controller: 'SignUpController', 
     title: 'Sign Up' 
    }).when('/dashboard', { 
     templateUrl: 'app/views/dashboard.html', 
     controller: 'DashboardController', 
     title: 'Dashboard'});}); 

app.run(function($rootScope, $location, DataService) { 
var unAuthenticatedPages = ["/", "/signup"]; 
var checkLogin = function() { 
    if (!$rootScope.isLoggedIn && unAuthenticatedPages.indexOf($location.path()) === -1) { 
     $location.path('/'); 
    } 
}; 
$rootScope.isLoggedIn = true; 
    DataService.getUserListById(1, function(user) { 
     $rootScope.user = user; 
}); 
$rootScope.$on('$locationChangeStart', checkLogin);}); 
+0

Прежде чем оставлять вопрос, оставьте сообщение о конфиденциальности. –

ответ

0

angularjs поставляется со встроенной в библиотеке обещают $ Q, которые могут быть введены и использовать что-то вроде этого:

var doSomething = function() { 
    var deferred = $q.defer(); 

    //do someething here, when you're ready resolve the deferred object 
    deferred.resolve(); 

    //this won't execute until deferred is resolved or rejected 
    return deferred.promise; 
}; 

Вы также можете вернуть переменные с обещанием в случае необходимости. Вы можете затем

doSomething().then(function() { 
    //this executes if the promise is resolved 
}, function() { 
    //this executes if the promise is rejected 
}); 
Смежные вопросы