2016-05-14 2 views
0

角度の$ routeProviderと$ routeParamsを使用してアプリケーションのルーティングを制御しようとしています。私は、次のルートは、私がfollows-routeParams-AngularJSを使用してコントローラ間でJsonを渡すことができません

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

とクリックイベントに学生のコントローラに移動する関数を持っている私のホームコントローラ内部

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

を、確定しているすべてのルートの中で私がアクセスしていますがfollows-

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

としての私のStudentControllerで、この変数は、私が直面しています問題は、私は単純な変数(studentDetailsとして文字列)を渡した場合、コードが動作することですが、それFA jsonのためのils。これは予想される動作ですか、何か間違っていますか? $ routeParamsを使ってjsonを渡すことができない場合は、これを行う理想的な方法は何でしょうか?

+0

"studentDetails /:studentid /:studentname"と$ location.path( "/ studentDetails /" + studentid + '/' + studentname)として複数のrouteparamを追加する必要がある複数の変数を経路に渡したい場合。 –

+0

こんにちは、お返事ありがとうございます。あなたが示唆している問題のように、いくつかの問題の回避策を知っていますが、個々のparamteresを渡す代わりにJSONオブジェクトを直接渡すことは可能ですか? –

答えて

0

トライ代わり通過JSON変数の

$httpParamSerializerサービスを使用し、$location.path物体を通過するよう複数の可変

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

経路

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

内を通過以下。

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

$httpParamSerializerサービスは、オブジェクトをURL search query stringに変換します。

$locationsearch()path()の組み合わせです。パスパラメータは、$routeパスが一致するときに抽出されます。

パラメータ名の衝突の場合、path paramsがsearch paramsよりも優先されます。 1

0

理想的なやり方は、studentDetailsを文字列化することです。次のようにしてください。クリックイベントに学生のコントローラで 、これだけ

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

とStudentController

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

!!

関連する問題