2016-05-14 8 views
0

Ich versuche die routeProvider und routeParams von angular zu verwenden, um das Routing in meiner Anwendung zu steuern. Unter allen Strecken habe ich die folgenden Routen definedJson kann nicht zwischen Controllern übergeben werden. RouteParams-AngularJS

$routeProvider 
    .when("/home",{ 
    templateUrl : "home.html", 
    controller : "HomeController" 
}) 
.when("studentDetails/:student",{ 
    templateUrl : "studentDetails.html", 
    controller : "StudentController" 
}) 
.otherwise({redirectTo:"/home"}); 
}); 

In meiner Heimsteuerung habe ich eine Funktion, die den Schüler-Controller auf einem Click-Ereignisse als folgt-

$location.path("/studentDetails/" + studentDetails); // student details is a json. 

navigieren ich Zugriff auf diese Variable in meinem StudentController als folgt-

(function(){ 
    var StudentController = function($scope, $routeParams){ 
     $scope.details = $routeParams.student; 
    }; 
    var app = angular.module("dummy"); 
    app.controller("StudentController",StudentController); 
}()); 

das Problem, das ich bin vor ist, dass der Code funktioniert, wenn ich eine einfache Variable (eine Zeichenkette wie die studentDetails) passieren, aber es fa Iss für einen JSON. Ist das das erwartete Verhalten oder mache ich etwas falsch? Wenn es nicht möglich ist, einen Json mit den $ routeParams zu übergeben, wie sollte dies der ideale Weg sein?

+0

Wenn Sie mehrere Variablen in die Route einfügen möchten, müssen Sie mehrere routeparam als "studentDetails /: studentid /: studentname" und $ location.path ("/ studentDetails /" + studentid + '/' + studentname) hinzufügen; –

+0

Hallo, danke für die Antwort. Ich kenne einige Problemumgehungen für das Problem, wie das, das Sie vorgeschlagen haben, aber ist es möglich, ein JSON-Objekt direkt zu übergeben, anstatt einzelne Parameter zu übergeben? –

Antwort

0

try folgenden

statt variable Pass json passieren, wie mehrere variable

$location.path("/studentDetails/" + studentId+'/'+studentName); 

und in Route

.when("studentDetails/:studentId/:studentName",{ 
    templateUrl : "studentDetails.html", 
    controller : "StudentController" 
}) 
0

Um ein Objekt mit $location.path, verwenden Sie den $httpParamSerializer Dienst übergeben.

$location.path("/studentDetails/" + studentId + 
       '?' + $httpParamSerializer(studentDetails) 
); 

Der $httpParamSerializer Dienst konvertiert Objekte zu einem URL search query string. Die Routenparameter sind eine Kombination aus $locationsearch() und path(). Die Pfadparameter werden extrahiert, wenn der Pfad $route übereinstimmt.

Bei einer Kollision von Parameternamen haben path Parameter Vorrang vor search Parametern. 1

0

Idealer Weg ist, die studentDetails zu string. Tun Sie einfach wie folgt. In Student-Controller auf einem Click-Ereignis,

var str = JSON.stringify(studentDetails); 
$location.path("/studentDetails/" + str); 

und in StudentController

$scope.details = JSON.parse($routeParams.student); 

Das ist es !!

Verwandte Themen