2017-04-27 83 views
1

我基本上需要调用一个服务器,它会在加载控制器之前返回一个JSON结构。AngularJS - 使用解析时的问题

我使用了很多方法来存档,但它不工作。它不会显示任何错误,并且页面空白。关于发生了什么的任何线索?

这是我的控制器..

angular 
.module('app',[ 
    'ngAnimate', 
    'ui.router', 
    'ui.bootstrap', 
    'ngCookies' 
]) 
.run(function($rootScope) { 
    $rootScope.backendServer = "http://localhost:5000/"; 
}) 
.config(['$urlRouterProvider','$stateProvider', function($urlRouterProvider,$stateProvider) { 
    $stateProvider 
     .state('cms',{ 
      url: '/my', 
      templateUrl: './app/templates/my.html', 
      controller : 'my', 
      resolve: { 
       dbState: function ($q) { 
        var defer = $q.defer(); 
        Database.check().then(function (s) { 
         defer.resolve(s); 
        }); 
        return defer.promise; 
       } 
      } 
     }) 
}]) 
.controller(function ($scope){ 

}) 

...这是我的服务:

angular 
.module('app') 
.factory('Database',['$http', '$rootScope','$q', function($http, $rootScope, $q) { 
    return { 
     check: function() { 
      var call = $rootScope.backendServer + 'cms/database/check'; 
      return $http.get(call); 
     } 
    } 
}]); 
+0

并计划得到进入呢? 'Database.check()。then(function(s){ defer.resolve(s); });' –

+0

您忘记了将'Database'工厂注入到解析函数中,同时也避免了您的意思反映 –

+0

。 。我需要同时在控制器和解析器上建立承诺吗? –

回答

3

当你已经返回一个承诺不创建一个延迟对象。所以去除defer,就回到工厂功能

也,注入Database服务解决

resolve: { 
    dbState: function(Database) { 

     return Database.check() 
    } 
} 

在控制器中捕捉它像这样

.controller("ctrl", function($scope, dbState) { 
    console.log(dbState.data) 

}) 

Demo

+0

几乎那里......一切看起来不错,但dbState.then(函数(响应){console.log(响应) }) - 扔我一个dbState.then不是一个函数 –

+0

你可以创建一个plnkr或东西 –

+0

当然!创建在https://plnkr.co/edit/lav9R0enwZUWfS5xaI62 –