首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AngularJS UI路由器:块视图

AngularJS UI路由器:块视图
EN

Stack Overflow用户
提问于 2016-01-02 17:17:38
回答 1查看 637关注 0票数 0

现在我正在制作一个AngularJS+UI路由器安装应用程序。但我有一个问题,问题是,我想禁用对视图的访问,与安装应用程序相关联。我想在状态配置中解决这个问题。

但问题是,无论应用程序是否安装,我都需要从RESTful API中获取数据。我尝试创建函数,但它在$http.get请求完成之前加载了状态。

下面是我的解析函数代码:

代码语言:javascript
复制
  (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调用返回的内容:

EN

回答 1

Stack Overflow用户

发布于 2016-01-02 17:38:22

试着这样做:

代码语言:javascript
复制
$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

代码语言:javascript
复制
.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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34568513

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档