2016-05-14 3 views
0

Я пытаюсь использовать угловые $ routeProvider и $ routeParams для управления маршрутизацией в моем приложении. Среди всех маршрутов у меня есть следующие маршрутыНевозможно передать Json между контроллерами, используя routeParams- AngularJS

установленного размера
$routeProvider 
    .when("/home",{ 
    templateUrl : "home.html", 
    controller : "HomeController" 
}) 
.when("studentDetails/:student",{ 
    templateUrl : "studentDetails.html", 
    controller : "StudentController" 
}) 
.otherwise({redirectTo:"/home"}); 
}); 

Внутри моего дом контроллера У меня есть функция, которая будет перемещаться к контроллеру студента на событии щелчка следующего образом-

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

Я обращающийся эта переменная в моей StudentController следующим образом-

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

проблема я столкнулся в том, что код работает, если я прохожу простую переменную (строка как studentDetails), но фа ils для json. Является ли это ожидаемым поведением или я делаю что-то неправильно? Если невозможно передать json, используя $ routeParams, какой должен быть идеальный способ сделать это?

+0

Если вы хотите, чтобы несколько переменных передавались в маршрут, вам нужно добавить несколько маршрутов в качестве «studentDetails /: studentid /: studentname» и $ location.path («/ studentDetails /» + studentid + '/' + имя студента); –

+0

Привет, спасибо за ответ. Я знаю пару обходных решений проблемы, как тот, который вы предложили, но возможно ли передать объект JSON напрямую вместо передачи отдельных параметров? –

ответ

0

попробовать следующие

вместо переменной JSon прохода передать как множественный переменная

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

и в пути

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

Чтобы передать объект с $location.path, используйте $httpParamSerializer службу.

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

$httpParamSerializer служба преобразует объекты в URL search query string.

Параметры маршрута представляют собой комбинацию $locationsearch() и path(). Параметры пути извлекаются, когда путь $route сопоставляется.

В случае столкновения имени параметра, path params имеют приоритет над search params. 1

0

Идеальный способ - подкрепить студентом детали. Просто делайте, как следует. В контроллере студента на событие щелчка,

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

и StudentController

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

То оно !!

Смежные вопросы