2017-04-18 3 views
0

I ui-Router bin mit einem Objekt in einem anderen Zustand und Controller passieren mit

$state.go() 

Aber die console.log für das $ stateParams Objekt wird als undefiniert zeigt nach oben. Das Objekt besteht aus x- und y-Koordinaten, die einfache ganzzahlige Werte zwischen 0 und 20 sind. Wenn ich die userData in der EnterCtrl console.log bekomme, bekomme ich die richtigen Variablen, also nehme ich an, die richtigen Informationen wurden gesendet.

Ich habe hier viele Beispiele angeschaut und viele Möglichkeiten ausprobiert, aber ich kann es nicht zum Laufen bringen. Wie kann ich die $stateParams durch die CanvasCtrl

EnterCtrl Userdata-Objekt $state.go

myMap.controller('EnterCtrl',['$scope', '$state', function EnterCtrl($scope,$state){ 
    $scope.formData = { 
     x: 0, 
     y: 0 
    }; 
    var userData = $scope.formData; 
    // console.log(userData); 

    $scope.goToAnswer = function(){ 
     console.log(userData); 
      $state.go('answer', {coor: userData}) ; 
     }; 

}]); 

Antwort Staat mit Pässen zu sehen, die das Objekt wird übergeben.

var answerState = { 
     name: 'answer', 
     url: '/answer/:coor', 
     templateUrl: 'partials/answer.html', 
     controller: 'CanvasCtrl', 
     params: {coor: null} 
    }; 

Der Controller, der den StatusParams erhält.

myMap.controller('CanvasCtrl', ['$scope','$state','$stateParams',function CanvasCtrl($scope,$state,$stateParams){ 

var userData = $stateParams.coor; 
    // var userDataY = $stateParams.coor.y; 
    //var userDataX = $stateParams.coor.y; 

    console.log(userData); 
}]); 

https://plnkr.co/edit/lwP7DGkwHl2ZWWegazyv?p=preview

+0

können Sie die UI-Router-Version teilen? – puemos

+1

Können Sie einen Plünderer hinzufügen? –

+0

@clever_bassi Ich habe es gerade dort hinzugefügt. –

Antwort

1

Ich reparierte Ihr Problem here. Grundsätzlich habe ich JSON.stringify hinzugefügt, um das Objekt in json vor dem Senden zu konvertieren, andernfalls würde es als [object Object] drucken.

+0

Danke, dass funktioniert und ich kann jetzt sehen die Daten, wenn ich an die Konsole drucke. Wenn ich die Daten an eine andere Methode übergebe und versuche, auf die x- und y-Variablen zuzugreifen, werde ich undefiniert. Ist das so, weil das Objekt stringifiziert wurde? –

+0

Kannst du den Plünderer zeigen, wo du es versucht hast? –

+0

oder versuche mit JSON.parse(), um das Objekt aus der Zeichenfolge –

0

zunächst eine Fabrik erstellen, die Ihren Zustand param Wert enthält Funktion wie unten:

 function stateParam() { 
      var selectedRelease = "your value" 
      $state.go('app.dashboard.detail.releases', {'selectedRelease': 
        selectedRelease}); 
     } 

inject diese Fabrik in beiden Controller.

rufen Sie diese Funktion in Ihrem ersten Controller unter Verwendung des Werksnamens auf. Wie, wenn Sie Fabrik Namen haben, als Sie es als anrufen: factory.stateParam()

+0

sollte es ohne die Fabrik funktionieren, es ist ein Workaround und nicht das ursprüngliche Problem zu lösen, nur versteckt es – puemos

Verwandte Themen