2015-03-09 3 views
0

Я, кажется, возник проблемы в stringify'ing затем Пазинг из объекта URL-адресаJson stringify затем разобрать из URL

Я просто stringify моего объекта и установить место (с $ места углов главным), как так

currentUrl = {"module1" : {"is" : true} } 
$location.search(JSON.stringify(currentUrl)); 

так что разбирает к URL просто отлично, но когда я пытаюсь захватить его из URL я получаю это назад

 console.log($location.search()); 
     --- 
    Object {{"module1":{"is":true}}: true} 

Как разобрать это обратно в объект, так что я могу использовать его? Если у меня есть

JSON.parse($location.search()); 

Я получаю синтаксическую ошибку. Возможно, из-за того, как поиск возвращает объект? Я немного смущен здесь, мог бы использовать некоторую помощь. Благодаря!

Так что я положил его в URL с

$location.search(JSON.stringify(currentUrl)); 

Какие шаги мне нужно предпринять, чтобы получить его обратно в эту форму:

{"module1" : {"is" : true} } 

Edit -

он просто появляется, что он устанавливает объект json в качестве ключа в местоположении, таком как

{ "mystrigifiedobject": true } 

Edit2:

основаны от первого редактирования, я был в состоянии решить эту проблему (assming это установлено в местах расположения объекта ключ) следующим образом:

currentUrl = $location.search(); 
        currentUrl = JSON.parse(Object.keys(currentUrl)); 
        console.log(currentUrl); 

Это просто чувствует себя немного странно, хотя, я Я здесь что-то не так?

+0

использование '$ routeParams'. –

+0

@ DanielA.White вы могли бы привести мне пример? Я не уверен - это немного странно, но я не использую маршруты для этого, общая идея заключается в отправке сохранения объекта в URL-адресе и возможности доступа к нему - делают ли это make-файлы? – ajmajmajma

+1

При сериализации объекта JSON для URL-адреса не забудьте запустить результат через encodeURIComponent(), например: $ location.search (encodeURIComponent (JSON.stringify (currentUrl))); – HankScorpio

ответ

1

$ location.search() возвращает проанализированные элементы поиска из URL-адреса в качестве объекта.Это означает, что этот вид URL:

?a=b&c=d

приведет к этому объекту:

{ a: 'b', c: 'd' }

При вызове этой функции:

currentUrl = {"module1" : {"is" : true} } 
$location.search(JSON.stringify(currentUrl)); 

ваш путь будет выглядеть следующим образом :

?%7B%22module1%22:%7B%22is%22:true%7D%7D

и разобранный объект, возвращаемый из $location.search будет выглядеть следующим образом:

{{"module1":{"is":true}}: true}

не то, что это объект с одним входом и ключ ваш JSON

Так что вам нужно сделайте это, чтобы вернуть свой объект:

var parsedObject = $location.search(); 
var yourObject = JSON.parse(Object.keys(parsedObject)[0]); 

см. этот jsfiddle: http://jsfiddle.net/HB7LU/11633/

Но обратите внимание: вы должны кодировать строку при вводе его в URL:

$location.search(encodeURIComponent(JSON.stringify(currentUrl))); 
0

$routeParams обеспечивает доступ как к значениям шаблона маршрутизации, так и к строкам запроса (в виде строки).

function ctrl($routeParams) { 
    var yourValueAsString = $routeParams.yourKey; 
} 

function ctrl2($location) { 
    $location.search('yourKey', JSON.stringify(...)); 
} 

Лучшей альтернативой было бы перейти на использование UI-маршрутизатора, который имеет дело с этим лучше.

+0

Я не использую ng-маршруты для этого, маршрутизация выполняется через что-то другое. – ajmajmajma

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