2014-12-06 3 views
1

В моем угловом приложении, которое я пытаюсь сохранить/восстановить данные между страницами и имею имею следующую функцию в месте:объектов теряются

$scope.storeData = function() { 

    var selections = $scope.devices; 
    console.log(selections); 

    sessionStorage.setItem('selectedHandsets', JSON.stringify(selections)); 

    var ss = sessionStorage.getItem('selectedHandsets'); 
    console.log(ss); 

} 

Вопрос довольно странно. Ключевыми значениями, которые я получаю в selections, являются «selectedManufacturer» и «selectedModel», и эти значения отображаются, как ожидается, в console.log(selections).

Когда зарегистрировано ss, 'selectedManufacturer' и 'selectedModel' не отображаются в sessionStorage.selectedHandsets. Они там, когда данные устанавливаются, потому что мы можем видеть их в выборе, но когда я регистрирую ss, они ушли!

Формат selections это примерно так:

[ 
    [ 
     { ... }, 
     { ... }, 
     selectedModel: { ... }, 
     selectedManufacuterer: { ... } 
    ], 
    [ 
     { ... }, 
     { ... }, 
     selectedModel: { ... }, 
     selectedManufacuterer: { ... } 
    ] 
] 

Если я обернуть вокруг JSON.stringify()console.log(selections) затем selectedModel и selectedManufacturer исчезают. Может ли кто-нибудь объяснить мне, почему это происходит и каково соответствующее исправление?

ответ

2

Вы пытались проверить консоль, если она вызывает ошибку?

Что у вас есть искаженной JSON

[ 
    [ 
     { ... }, 
     { ... }, 
     selectedModel: { ... }, 
     selectedManufacuterer: { ... } 
    ], 
    [ 
     { ... }, 
     { ... }, 
     selectedModel: { ... }, 
     selectedManufacuterer: { ... } 
    ] 
] 

Посмотрите на

[ 
     { ... }, 
     { ... }, 
     selectedModel: { ... }, //There shouldn't be a named item in an array here 
     selectedManufacuterer: { ... } //There shouldn't be a named item in an array here 
    ] 

Там не должно быть именованный объект в массиве.


редактирует

То, что вы сделали, как это:

var arrayBuff= []; 
arrayBuff.push(2); 
arrayBuff.push(4); 
arrayBuff.push(6); 

//this would produce this: [2,4,6] 
console.log(arrayBuff); 

arrayBuff.someField = "foobar"; 

//this would produce this: [2,4,6, someField: "foobar"] 
// which is a malformed array 
console.log(arrayBuff); 

Вы можете сделать это вместо того, чтобы:

var arrayBuff = {}, 
    arrayBuff.arrays = []; 
arrayBuff.arrays.push(2); 
arrayBuff.arrays.push(4); 
arrayBuff.arrays.push(6); 

//this would produce this: { arrays: [2,4,6] } 
console.log(arrayBuff); 

arrayBuff.someField = "foobar"; 

//this would produce this: { arrays: [2,4,6], someField: "foobar"} 
// which is correct and can be parsed by JSON.stringify 
console.log(arrayBuff); 

Причина, почему JSON.stringify не было способный разбирать именованное поле, был просто потому, что он ожидал массив.

+0

Как исправить это? Угловой толкает именованный элемент (что мне и нужно), так как значения ng-моделей – leaksterrr

+0

вы можете предоставить исходный результат JSON.stringify перед тем, как поместить его в localstorage? строковая форма выбора. оттуда, мы можем видеть, что произошло –

+0

были ли ошибки? –

0

Предыдущий ответ правильный. Что вы можете сделать, так это восстановить выбранные вами объекты как {arrObjs: [ваш массив будет здесь], модели: [...], производители: [...]}

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