2013-09-02 10 views
12

Gibt es eine Möglichkeit, auf $stateParams für den Status zuzugreifen, zu dem Sie von einem in einer Auflösungsfunktion aufgerufenen Service wechseln? Mit ngRoute würden Sie $route.current.params verwenden. Wie diese minimal zupfen zeigt, sieht der Dienst nur den Zustand Sie verlassen:

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

ich die neue $stateParams wenn $stateParams direkt in eine Entschlossenheit Funktion injiziert, aber die Werte sind immer noch hinter auf einem Weg im Dienste.

Was fehlt mir?

+0

Sie sind nicht etwas zu verpassen. Bis der Übergang abgeschlossen ist, verfügt der Dienst $ stateParams nicht über die neuen Parameter. – laurelnaiad

+0

Gibt es eine Möglichkeit, auf Parameter aus dem neuen Status zuzugreifen, bevor der Übergang mit dem Dienst "$ state" (oder einem anderen) abgeschlossen ist? – nrw

+0

Wie ich in der ausführlichen Zustandsdokumentation sehe, gibt es einen Beispielcode, der zeigt, dass '$ stateParams' in den Resolve Hash eingegeben wird. Siehe Wiki Abschnitt "Resolve" https://github.com/angular-ui/ui-router/wiki – Chandermani

Antwort

11

Sie nicht die die eingehenden Parameter in den Dienst selbst injizieren, aber Sie können sie im Dienst an eine Funktion (oder Sie könnten auch sie in dem Dienst eine Eigenschaft zuweisen).

this plunker zeigt, wie Sie sie an eine Funktion übergeben, die sie wiederum in einer Eigenschaft im Dienst speichert. Die Verwendung einer "Dummy" -Eigenschaft sollte nicht schaden, ist aber ein bisschen hässlich. :)

Es könnte sinnvoller sein, die Parameter als control-Eigenschaft an den Controller zu übergeben und sie dann an einen Service vom Controller-Konstruktor weiterzugeben ... das würde ich tun.

+0

Hallo, Ihr Plunker war kaputt, also habe ich es repariert, aktualisierte Gabel hier: http://plnkr.co/edit/JZjkG1UdTi1V60DykFxg?p=preview –

8

In Ihrer Entschlossenheit Funktion in stateprovider

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

In Ihrem Service

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

Wie würde das funktionieren, wenn minimiert? – pilau

+2

@pilau, wenn Sie 'ng-annotieren' verwenden, wird es kein Problem mit der Verkleinerung geben. –