パッケージ内のユーザー項目をリスト形式で表示する Ionic 2 アプリがあります。パッケージ内の現在のアイテム インデックスを取得する関数を作成しました。ユーザーがアプリを起動すると起動されます。Ionic Storage (内部) メモリ内のインデックスの名前と値のペアが null かどうかを確認します。その場合、インデックスは 0 に設定され、内部メモリと作業メモリの両方に格納されます。それ以外の場合、インデックスは内部メモリから取得され、作業メモリの設定に使用されます。
ただし、self.storage.set(myString, '0');
以下のコードではエラーがスローされますTypeError: Cannot call method 'set' of undefined
。私は使用を確認しましたがconsole.dir
、実際にはブロックself.storage
内で未定義でした。then(...);
これはなぜですか?どうすれば回避できますか?
インポート、宣言、コンストラクター
import { Injectable } from '@angular/core';
import { Storage } from '@ionic/storage';
declare var self: ItemStorageService;
@Injectable()
export class ItemStorageService {
workingMemoryItems: Array<any>;
workingMemoryIndex: number;
packageIndex: number;
constructor(public storage: Storage) {
self = this;
self.packageIndex = 0;
self.initializeIndex().then(
res => {
console.log(res);
},
err => {
console.log(err);
}
)
}
// Other methods including initializeIndex()
}
InitializeIndex 関数
public initializeIndex(): Promise<any> {
console.dir(self.storage); // Returns Storage object
var myString = 'index_item_package_' + self.packageIndex;
return new Promise((resolve, reject) => {
self.storage.get(myString).then(
val => {
if ((val === null) || (val === 'null')) {
console.dir(self.storage); // Returns undefined
self.storage.set(myString, '0');
self.workingMemoryIndex = 0;
resolve('Working memory index not found and set to 0');
} else {
self.workingMemoryIndex = val as number;
resolve('Working memory index found and set to ' + val);
}
},
err => {
self.storage.set(myString, 0);
self.workingMemoryIndex = 0;
reject('Working memory index not found and set to 0');
}
)
});
}