#session #polymer #local-storage #polymer-1.0
#сессия #полимер #локальное хранилище #polymer-1.0
Вопрос:
Я пытаюсь выяснить, как установить и извлечь значение в app-localstorage-document. Я работал раньше с элементом iron-meta и делал это следующим образом:
<iron-meta id="meta" key="id" value="{{meta}}"></iron-meta>
Polymer({
is: 'login-form',
properties: {
meta: {
type: String,
value: ''
},
},
getValue: function() {
this.meta = '100'
var savedValue = this.$.meta.byKey('id');
console.log(savedValue);
}
});
Но когда я пробую что-то подобное с приложением-localstorage-document, оно просто возвращает:
Обещание {[[PromiseStatus]]: «разрешено», [[PromiseValue]]: не определено}
Я не могу найти ни одного примера того, как работать с этим элементом. Может быть, кто-нибудь сможет мне здесь помочь.
<app-localstorage-document id="meta" key="id" data="{{meta}}" storage="window.localStorage"></app-localstorage-document>
Polymer({
is: 'login-form',
properties: {
meta: {
type: String,
value: ''
},
},
getValue: function() {
this.$.meta.setStoredValue('id', '50');
var savedValue = this.$.meta.getStoredValue('id');
console.log(savedValue);
}
});
Ответ №1:
Я все еще изучаю этот элемент самостоятельно. Документация не такая уж прямая. Это то, что я понимаю до сих пор.
Проблема больше в изменении способа, которым вы думаете о доступе к данным хранилища. Элемент app-localstorage-document обрабатывает это за вас.
<app-localstorage-document id="meta" key="id" data="{{meta}}" storage="window.localStorage"></app-localstorage-document>
Атрибут «данные» синхронизируется с ключом хранения «id». Каждый раз, когда обновляется «id», обновляется переменная, присвоенная «данным». Это означает, что в этом случае изменения в ключе «id» будут преобразованы в переменную «meta».
Если вам нужно получить доступ к информации в хранилище, она должна быть доступна в переменной «meta».
this.meta.name or {{meta.name}}
this.meta.id or {{meta.id}}
Это означало бы, что переменная, присвоенная «данным», должна иметь тип Object.
meta:{
type:Object,
value:{},
notify:true
}
В результате, если вы используете этот элемент, нет причин для прямого доступа к локальному хранилищу. Вот для чего предназначен этот элемент.
Комментарии:
1. Я попробую это, а затем приму ваш ответ, если все получится. В итоге я использовал iron-localstorage, потому что он просто казался более простым в использовании.
2. Должно быть, я что-то упускаю — это не сработало. Когда я перезагрузил свою страницу, значения очистились, а не отображались последние использованные значения. железо-localstorage работает.
3. как использовать метод isNew() для инициализации значения, если ключ не сохранен ранее?
Ответ №2:
Основная идея заключается в синхронизации данных в памяти с localStorage.
приложение-localstorage-document хранит «данные» в localStorage или sessionStorage. Любое изменение в потоках данных возвращается в хранилище. В вашем случае вам просто нужно задать объекту {{meta}} желаемые значения, и app-localstorage-document гарантирует, что он сохранен в локальном хранилище.
Поскольку вы всегда можете работать с данными в памяти, вы можете не читать данные из localStorage в том же элементе. Однако для чтения сохраненных данных в других элементах вы могли бы использовать iron-localstorage или даже напрямую читать из localStorage с помощью ключа.