Я строю расширение хром и столкнулся с ошибкой, с которой я не могу окутать голову. Проблема заключается в одном объекте, которое становится null
в хранилище хромов.Свойство объекта становится null после chrome.storage.sync.set
Я проверяю это, выполнив:
console.log("pre-storage", settings);
var obj = {};
obj[storage_key] = settings;
chrome.storage.sync.set(obj, function() {
chrome.storage.sync.get(storage_key, function(data) {
console.log("post-storage", data[storage_key]);
});
});
Это выход:
pre-storage, Object {
...
soundClip: Object {
options: Array[5],
selected: Object {
label: "Soft2",
value: "snd/soft2.wav"
}
}
}
post-storage, Object {
...
soundClip: Object {
options: Array[5],
selected: null
}
}
Хранение JSON.parse(JSON.stringify(obj))
вместо obj
непосредственно, кажется, чтобы исправить это. У кого-нибудь есть идеи, что может вызвать это? Любая помощь приветствуется!
Редактировать: Создание глубокой копии obj
не исправляет ее.
Редактировать 2: Я должен расширить, как установить settings.soundClip
. Я использую Angular (1.x), и я использую настраиваемую директиву select. Урезанная директива выглядит следующим образом:
function mySelect() {
return {
restrict: "E",
templateUrl: "mySelect.html",
scope: {
options: "=",
selected: "="
},
link: function (scope) {
scope.select = function (item) {
scope.selected = item;
};
}
}
}
вид шаблона Директива (mySelect.html
):
<div>
<div ng-repeat="item in options track by $index"
ng-click="select(item)">
</div>
</div>
Свойства затем двухсторонняя связаны следующим образом:
<my-select selected="settings.soundClip.selected"
options="settings.soundClip.options">
</my-select >
Спасибо за ответ! К сожалению, использование '' test ''вместо' storage_key' дает те же результаты. – Easypeasy
Правильно, и поскольку вы выбрали значение с помощью storage_key, я предполагаю, что это работает. Я бы посмотрел, как вы вкладываете любое значение в settings.soundClip.selected (или аналогичный синтаксис словаря), хотя, поскольку это единственная часть, которая имеет проблему, просто чтобы быть ясной. Извините за любую путаницу. – eholder0
Да, это может быть интересно, я добавил дополнительную информацию к исходному вопросу! – Easypeasy