2014-07-08 3 views
13

Ich benutze Angular UI-Router mit einer Auflösungsfunktion, aber wenn ich die Auflösungsfunktion reduziere, bricht meine gesamte Anwendung ab, weil die Auflösungsfunktionssyntax nicht korrekt für die Minimierung ist. Es muss auf String-Injection basieren, wie beschrieben here. Ich bin mir nicht sicher, wie ich es schreiben soll. Irgendwelche Vorschläge?Angular UI-Router Fehlerminimierung - Wie kann ich die Resolve-Syntax zu String Injection Based ändern?

// Resolves 
var checkAuthentication = function($q, $location, $rootScope, Users) { 
    if ($rootScope.user) return true; 
    if (!$rootScope.user) { 
     var deferred = $q.defer(); 
     Users.get(null, function(user) { 
      if (!user) { 
       window.location = '/'; 
       return false; 
      } 
      console.log('User fetched: ', user); 
      $rootScope.user = user; 
      deferred.resolve(); 
     }, function() { 
      window.location = '/'; 
      return false; 
     }); 
     return deferred.promise; 
    } 
}; 

// Routes 
angular.module('Dashboard').config(['$stateProvider', '$urlRouterProvider', 
    function($stateProvider, $urlRouterProvider) { 
     // For any unmatched url, redirect to '/' 
     $urlRouterProvider.otherwise('/dashboard'); 
     // Now set up the states 
     $stateProvider 
      .state('dashboard', { 
       url: '/dashboard', 
       templateUrl: 'views/content/dashboard.html', 
       resolve: { 
        checkAuthentication: checkAuthentication 
       } 
      }) 
+0

Vermissen Sie den Rest Ihres '.module (" Dashboard ")' func - sonst fehlen die schließenden Klammern und was npt – tymeJV

+1

Würden Sie es nicht auf die gleiche Weise wie mit der .config übergeben? als ein Array? –

+0

tymeJV - Ich habe einfach die .config-Funktion als Referenz eingefügt, das ist also nicht das Problem. Das Problem tritt nur bei der Syntax der checkAuthentication-Funktion auf. – ac360

Antwort

24

Die Art und Weise Sie dies normalerweise tun würde, ist durch ein Array an die Entschlossenheit vorbei:

resolve: { 
    welcome: ['$q', function ($q) { 
     var def = $q.defer(); 
     setTimeout(function() { 
      def.resolve("Hello World!"); 
     },500); 
     return def.promise; 
    }] 
} 

Mit dem im Verstand, können Sie Ihre var wie folgt definieren:

var welcome = ['$q', function ($q) { 
    var def = $q.defer(); 
    setTimeout(function() { 
     def.resolve("Hello World!"); 
    },500); 
    return def.promise; 
}] 

aber das ist natürlich nicht wirklich wiederverwendbar, also würde ich an dieser Stelle vorschlagen, es zu einem Dienst zu bringen.

+2

"(...) das ist natürlich nicht wirklich wiederverwendbar, also würde ich an dieser Stelle vorschlagen, es zu einem Dienst zu bringen." - Genau meine Gedanken. – Gamb

+0

Funktioniert für mich. Vielen Dank :) – ac360

Verwandte Themen