2013-09-02 5 views
12

Czy istnieje sposób dostępu do $stateParams dla stanu, do którego przechodzisz, z usługi wywoływanej w funkcji rozstrzygania? Z ngRoute użyjesz $route.current.params. Jak ten minimalny pokazy upadać, usługa widzi tylko stan Wyjeżdżasz:

http://plnkr.co/edit/QpwgAj?p=preview

pojawia się nowy $stateParams$stateParams gdy jest wstrzykiwany bezpośrednio do funkcji rozwiązywania, ale wartości są nadal za jednym sposobem w serwisie.

Czego mi brakuje?

+0

Nie brakuje niczego. Do czasu zakończenia przejścia usługa $ stateParams nie ma nowych parametrów. – laurelnaiad

+0

Czy istnieje sposób uzyskiwania dostępu do parametrów z nowego stanu przed zakończeniem przejścia z usługą '$ state' (lub inną)? – nrw

+0

Jak widzę w dokumentacji stanu pełnego istnieje przykładowy kod, który pokazuje '$ stateParams', które jest wstrzykiwane do skrótu rozstrzygnięcia. Zobacz sekcję wiki 'Resolve' https://github.com/angular-ui/ui-router/wiki – Chandermani

Odpowiedz

11

Ty nie można wstrzykiwać z przychodzących parametry do samej usługi, ale można przekazać je do funkcji w służbie (lub można również przypisać je do właściwości w służbie).

this plunker pokazuje, jak przekazać je do funkcji, która z kolei przechowuje je w usłudze w usłudze. Używanie właściwości "dummy" nie powinno boleć, ale jest trochę brzydkie. :)

To może mieć więcej sensu przekazanie parametrów do kontrolera jako właściwości rozwiązania, a następnie przekazanie ich do usługi od konstruktora kontrolera ... to właśnie zrobię.

+0

Witam, twój plunker został złamany, więc naprawiłem go, zaktualizowałem widelec tutaj: http://plnkr.co/edit/JZjkG1UdTi1V60DykFxg?p=preview –

8

W funkcji resolve w stateprovider

resolve: { 
    something: function(MyService, $stateParams){ 
     return MyService.doSomethingWithParam($stateParams.someParameter); 
    } 
} 

w usłudze

myService = angular.module('myService', []) 
    .factory('MyService', function() { 

     var myServiceInstance; 

     myServiceInstance.doSomethingWithParam= function(param){ 
      //...store or do something with your state param here and return result 
     }; 

     return myServiceInstance; 
}); 
+0

Jak to by działało, gdyby było zminimalizowane? – pilau

+2

@pilau, jeśli użyjesz 'ng-adnotate', nie będzie problemu z minifikacją. –

Powiązane problemy