2015-07-22 9 views
7

Mam następujący kod (poniżej), działają one idealnie dla mnie i do co potrzebuję co najmniej. Ale jestem sceptycznie nastawiony do tego, mam wrażenie, że jest zbyt piękne, aby mogło być prawdziwe. Ponieważ zmagam się z asynchronicznym zachowaniem $http, bardzo mi pomogło wykorzystanie obiektu odpowiedzi z żądania $http globalnie na kontrolerze.Czy można poprawnie uzyskać żądanie otrzymania http dla ui.router w angularjs?

Po prostu chcę wiedzieć, czy jest to właściwy sposób, czy przynajmniej akceptowalny, czy też powinienem użyć standardowego sposobu używania numeru $http, aby uzyskać jak na AngularJS' Documentation, zanim przejdę do mojego projektu. Odpowiedzi bardzo mi pomogą. Dziękuję Ci.

$ stateProvider

$stateProvider 
    .state('test', { 
     url: '/test', 
     templateUrl: 'partial.template.html', 
     resolve : { 
      foo : function($http) { 
       return $http({ 
        method: 'GET', 
        url: '/api/something' 
       }); 
      }, 
      bar : function($http) { 
       return $http({ 
        method: 'GET', 
        url: '/api/something' 
       }); 
      }, 
     }, 
     controller: 'mainController', 
    }) 

kontroler

.controller('mainController',['$scope', 'foo', 'bar', function($scope, foo, bar){ 
    $scope.fooObj = foo; 
    $scope.barObj = bar; 
}]) 
+2

Wygląda dobrze dla mnie. To właśnie zostało stworzone rozwiązanie. Co Cię martwi? – Thomas

+0

Istnieją nawet przykłady tego w dokumentacji routera – charlietfl

+0

@ Thomas Myślę, że może to nie jest najlepszy sposób i nie chcę poświęcać czasu na inwestowanie w to podejście, a następnie w przyszłości może spowodować rozbicie mojego świata (lol). Jeśli powiesz, że to w porządku, to ci wierzę. Dzięki stary. :) – CENT1PEDE

Odpowiedz

7

myślę, że to jest prawdopodobnie najlepszym USECASE dla determinacji ui-routera.

W każdym razie wolałbym łączyć moje połączenie http w usługi i wywoływać te usługi w rozstrzygnięciu, zamiast bezpośrednio korzystać z http.

Może to wyglądać tak:

app.service('FooService',function($http){ 
    var service={}; 
    service.getFoo = function(){ 
     return $http({ 
       method: 'GET', 
       url: '/api/something' 
      }); 
    } 
    return service; 
}); 

Dzięki temu można wywołać tej metody na całym aplikacji (i scentralizować go w tym samym czasie).

W sterowniku:

app.controller('MyController', function($scope, FooService) { 
    $scope.controllerName = "MyController"; 
    FooService.getFoo().success(function(foo){ 
     $scope.foo = foo 
    }); 
}); 

W postanowieniu:

$stateProvider 
.state('test', { 
    url: '/test', 
    templateUrl: 'partial.template.html', 
    resolve : { 
     foo : function(FooService) { 
      return FooService.getFoo(); 
     }, 
    }, 
    controller: 'MyController', 
}) 

Idź z tym podejściem, jesteś na dobrej drodze.

Mam nadzieję, że pomogło.

EDYCJA: Zbudowano plunker, aby dodać konkretny przykład tych metod.

+0

Uhm faktycznie mam mały problem z tym partnerem. Wygląda na to, że rozwiązanie uniemożliwia załadowanie szablonu? To dziwne, ale nie ma błędu na konsoli. – CENT1PEDE

+0

Tak, faktycznie szablon nie zostanie załadowany, dopóki nie zostanie rozwiązana obietnica w rozstrzygnięciu. Jeśli tego nie chcesz, pozostań przy usłudze i użyj przykładu "kontrolera". Możesz dodać kilka ładowarek i będzie działać jak urok. – Okazari

+0

To może brzmieć nowicjusz, ale jak mogę rozwiązać obietnicę? – CENT1PEDE

Powiązane problemy