2

パッケージ内のユーザー項目をリスト形式で表示する 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');
            }
        )
    });
}
4

2 に答える 2

0

を削除して、self = thisそのまま使用してみてくださいthis

お気に入り :

this.packageIndex = 0;this.storage.get(myString).then(...

于 2017-09-06T09:43:21.723 に答える