2017-04-27 80 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 –