2017-04-27 11 views
1

Ich muss grundsätzlich einen Server aufrufen, der mir eine JSON-Struktur zurückgibt, bevor der Controller geladen wird.AngularJS - Probleme bei der Verwendung der Auflösung

Ich habe viele Methoden verwendet, um das zu archivieren, aber es funktioniert nicht. Es zeigt mir keinen Fehler und die Seite wurde leer. Irgendeine Ahnung von dem, was vor sich geht?

Dies ist mein Controller ..

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){ 

}) 

... und das ist mein Service:

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

zu lösen ist Programm erhalten in dann? 'Database.check(). Dann (function (s) { defer.resolve (s); });' –

+0

Sie haben vergessen, 'Database' factory zu der Auflösungsfunktion zu injizieren, vermeiden Sie auch versprechen anti-Muster –

+0

Sie meinen. .Ich muss gleichzeitig Versprechen auf dem Controller und auf dem Resolver bauen? –

Antwort

3

Sie ein Zurückstellungs Objekt nicht erstellen, wenn Sie bereits ein Versprechen zurück. so die defer entfernen und nur die Fabrik Funktion

auch zurückkehren, injizieren die Database Service

resolve: { 
    dbState: function(Database) { 

     return Database.check() 
    } 
} 

In der Steuerung fangen sie wie diese

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

}) 

Demo

+0

Fast da ... alles sieht gut aus, aber dbState.then (Funktion (Antwort) { console.log (Antwort) }) - werfen Sie mir eine dbState.then ist keine Funktion –

+0

können Sie ein PLNKR oder etwas –

+0

erstellen Sicher ! erstellt an https://plnrkr.co/edit/lav9R0enwZUWfS5xaI62 –

Verwandte Themen