AngularJS UI router: блочное представление

0

Прямо сейчас я делаю приложение для установки маршрутизатора AngularJS + UI. Но у меня проблема, проблема в том, что я хочу отключить доступ к представлениям, связанным с приложением установки. Я хочу сделать это в разрешении в конфигурации состояния.

Но проблема в том, что мне нужно получить данные из RESTful API, независимо от того, установлено это приложение или нет. Я попытался сделать эту функцию, но она загрузила состояние до завершения запроса $ http.get.

Вот мой код для функции разрешения:

  (function() {
var app = angular.module('states', []);

app.run(['$rootScope', '$http', function($rootScope, $http) {
  $rootScope.$on('$stateChangeStart', function() {
    $http.get('/api/v1/getSetupStatus').success(function(res) {
      $rootScope.setupdb = res.db_setup;
      $rootScope.setupuser = res.user_setup;
    });
  });
}]);

app.config(['$stateProvider', '$urlRouterProvider', function($stateProvider, $urlRouterProvider) {
  $urlRouterProvider.otherwise("/404");

  $stateProvider.state('db-install', {
      url: "/install/db",
      templateUrl: 'admin/js/partials/db-install.html',
      controller: 'DBController',
      resolve: {
        data: function($q, $state, $timeout, $rootScope) {
          var setupStatus = $rootScope.setupdb;
          var deferred = $q.defer();

          $timeout(function() {
            if (setupStatus === true) {
              $state.go('setup-done');
              deferred.reject();
            } else {
              deferred.resolve();
            }
          });
          return deferred.promise;
        }
      }
    })
    .state('user-registration', {
      url: "/install/user-registration",
      templateUrl: "admin/js/partials/user-registration.html",
      controller: "RegisterController"
    })
    .state('setup-done', {
      url: "/install/setup-done",
      templateUrl: "admin/js/partials/setup-done.html"
    })
    .state('404', {
      url: "/404",
      templateUrl: "admin/js/partials/404.html"
    });
}]);
})();

РЕДАКТИРОВАТЬ:

Вот что возвращает мой вызов ajax: Изображение 174551

Теги:
angular-ui-router

1 ответ

0

Попробуйте так:

$stateProvider.state('db-install', {
  url: "/install/db",
  templateUrl: 'admin/js/partials/db-install.html',
  controller: 'DBController',
  resolve: {
    setupStatus: function($q, $state, $http) {
      return $http.get('/api/v1/getSetupStatus').then(function(res) {
        if (res.db_setup === true) {
          $state.go('setup-done');
          return $q.reject();
        }
        return res;
      });
    }
  }
})

Затем введите setupStatus в контроллер:

.state('setup-done', {
  url: "/install/setup-done",
  templateUrl: "admin/js/partials/setup-done.html",
  controller: ['$scope', 'setupStatus', function ($scope, setupStatus) {
      $scope.setupdb = setupStatus.db_setup;
      $scope.setupuser = setupStatus.user_setup;
  }]
})
  • 0
    Он все еще не работает, он просто загружает состояние в любом случае
  • 0
    @JonasHoffmann показывает данные, которые возвращаются после вызова ajax
Показать ещё 1 комментарий

Ещё вопросы

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