используя разрешение в маршрутах angularjs

0

Я работаю над приложением angularjs, и моя конфигурация выглядит так:

.config(function($stateProvider,$urlRouterProvider, $localStorage){
  $stateProvider
  .state('Login',{
    url:'/login',
    templateUrl:'templates/login.html',
    controller:'LoginCtrl',
    resolve: {
    /*   if($localStorage.userInfo === null || $localStorage.userInfo === undefined){
          }else{
           $scope.signInUser();
  }*/
    }
  })

Мой login.html выглядит так:

<form name="loginform"></form>

Я хочу, чтобы, если $ localstorage.userInfo существует, не показывайте login.html, но вызывайте функцию $ scope.signInUser, иначе покажите форму.

Как это сделать, используя решение маршрута? Могу ли я получить некоторые указания?

Я попробовал более простые способы, но я закончил с 10 циклами дайджеста, достигшими ошибки, поэтому мне было рекомендовано использовать решение для этой цели.

Мой полный маршрут выглядит следующим образом:

.config(function($stateProvider,$urlRouterProvider, $localStorage){
  $stateProvider
  .state('Login',{
    url:'/login',
    templateUrl:'templates/login.html',
    controller:'LoginCtrl',
    resolve: {
       if($localStorage.userInfo === null || $localStorage.userInfo === undefined){
          }else{
           $scope.signInUser();
  }
    }
  })

  .state('Deployment',{
    url:'/deployment',
    templateUrl:'templates/deployment.html'
  })
  .state('Bill',{
    url:'/bills',
    templateUrl:'templates/bills.html'
  })
//$urlRouterProvider.otherwise('/login');

$urlRouterProvider.otherwise(function ($injector) {
           var $state = $injector.get('$state');
            $state.go('Login');
        });
  • 0
    Если единственным требованием является «показать» форму или нет, почему бы вам не использовать директиву, которая обрабатывает это? Будет гораздо проще, чем решать это при каждом изменении маршрута.
  • 0
    Это не просто показ формы. Речь идет о том, чтобы показать его, если $ localstorage.userinfo недоступен и, если он доступен, перенаправить на состояние в Deployment с помощью state.go после вызова функции signInUser. С помощью директивы я закончил с 10 достигнутыми ошибками в циклах дайджеста, и поэтому я пытаюсь сделать это здесь в разрешении, которое должно вызываться только один раз в любом случае. @skubski
Показать ещё 5 комментариев
Теги:

2 ответа

0

Пришлось попробовать это самостоятельно, прежде чем делиться кодами.

Удалите функцию resolve из значения локального хранилища как данные, как показано ниже.

state('Login',{
   url:'/login',
   templateUrl:'templates/login.html',
   controller:'LoginCtrl',
   data : {userIfno : $localStorage.userInfo}
  })

Затем используйте функцию .run например

.run($rootScope, $state) {
    $rootScope.$on('$stateChangeStart', function(toState) {
        if (toState.data.userIfno === '') {
            $state.go('Login', {}); //here set proper state
        }
    });
}

Надеюсь, это вам поможет.

  • 0
    Он перенаправляет в состояние входа в систему, когда localstorage не имеет userinfo, но не перенаправляет в развертывание, когда его нет. Кроме того, если бы я должен был перенаправить его на развертывание из блока запуска, я не могу вызвать $ scope.signInUser, что мне нужно сделать
  • 0
    Что $scope.signInUser функция $scope.signInUser ?? Я предполагаю, что он входит в систему пользователей. правильно ??
Показать ещё 3 комментария
0

Как я достиг этого

routes.js

app.config(["$routeProvider", "$locationProvider", function($routeProvider, $location) {
    $routeProvider.when("/home", angularAMD.route({
        templateUrl: "templates/pages/home.html",
        controller: "HomeController",
        controllerUrl: "app/controllers/home_controller",
        resolve: {
            weekendTypes: function(WeekendTypes) {
                return WeekendTypes.getAll()
            }
        }
    }));
}]);

factory.js

app.factory("WeekendTypes", ["$http", function($http) {
    return {
        getAll: function() {
            var _apiurl = config_data.GENERAL_CONFIG.AJAX_URL + "weekend/getAll",
                promise = $http({
                    method: "GET",
                    url: _apiurl
                }).success(function(data, status, headers, config) {
                    return data
                });
            return promise
        }
    }
}])

Вы должны использовать что-то вроде этого

getData: function(){
   var deferred = $q.defer();
   $timeout(function(){
     var data=localStorageService.get('description'),
     deferred.resolve(data);
   },3000);
   return deferred.promise;
}
  • 0
    Это не отвечает на то, что я просил вообще. Я знаю основное использование решимости, но ваш ответ не относится к моей проблеме
  • 0
    Обновленный ответ.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню