离子存储 - 获取数据给我 [object Object]

Ionic storage - fetching data gives me [object Object]

我正在通过 Ionic Storage 存储一个 JSON 数组,如下所示:

this.storage.set('data', this.data).then().catch(err => {
  this.data.splice(this.data.indexOf(Data), 1);
});

并在函数中获取它:

fetchData(){
    this.storage.get('data').then(
      (data: {value: string, usage: string, date: string, addedDate: string}[]) => {
        this.data = data != null ? data : [];
        console.log('DATA FETCHED: ' + data);
        return data;
      }
    ).catch(err => {
      console.log(err);
    });
  }

我在数组中存储了 4 个对象,但是 console.log 只是返回给我:

DATA FETCHED: [object Object],[object Object],[object Object],[object Object]

我应该怎么做才能正确显示数组?我已经尝试过 .toString() 和 .slice()

home.html中的相关部分:

<ion-item *ngFor="let item of items">
    <h2>{{ item.usage }}</h2>
    <p>{{ item.date | date:'dd MMM yyyy' }}</p>
    <h1 item-end ngClass="{{ item.value.charAt(0) === '-' ? 'expense' : 'income' }}">{{ item.value }} €</h1>
    <!--<h1 item-end class="income">+ 450,00 €</h1>!-->
</ion-item>

home.ts:

@Component({
  selector: 'page-home',
  templateUrl: 'home.html'
})
export class HomePage {
  items: any = this.moneyService.fetchData();

  incomeval: any = IncomevalPage;
  expenseval: any = ExpensevalPage;

  constructor(public navCtrl: NavController, private moneyService: MoneyService) {}

  ionViewWillEnter(){
    this.items = this.moneyService.fetchData();
  }
}

您需要对 home.ts 进行一些更正:

@Component({
  selector: 'page-home',
  templateUrl: 'home.html'
})
export class HomePage {

  items: any;
  moneyService: any;

  incomeval: any = IncomevalPage;
  expenseval: any = ExpensevalPage;

  constructor(public navCtrl: NavController, data: MoneyService) {
    this.items = null;
    this.moneyService = data;
  }

  ionViewWillEnter(){
    this.items = this.moneyService.fetchData();
  }
}

我认为,除了 Marco 在他的回答中所说的之外,问题在于您没有 return 从 fetchData() 中获取任何内容。 return 语句在承诺中。 Promises 可能需要一段时间才能习惯,但如果你 return 结果,它将是一个具有新值的新 promise。举个例子可能更容易理解:

var promise = Promise.resolve("first").then(val => "second");
promise.then(val => console.log("val is", val));
// Prints: "val is second"

您正在设置 MoneyServicethis.data,但在 HomePage 组件的任何地方都无法访问它。

如果你把 fetchData 改成这样会怎么样:

fetchData(){
  return this.storage.get('data').then((data: {value: string, usage: string, date: string, addedDate: string}[]) => {
    return data != null ? data : [];
  });
}

它现在 return 一个承诺,你必须在 HomePage 中妥善处理它,也许是这样的(未经测试):

@Component({
    selector: 'page-home',
    templateUrl: 'home.html'
})
export class HomePage {
    items: any;

    incomeval: any = IncomevalPage;
    expenseval: any = ExpensevalPage;

    constructor(public navCtrl: NavController, private moneyService: MoneyService) {
        moneyService.fetchData().then(result => this.items = result);
    }
}

一有数据就会更新this.items