Я новичок в Ionic2 и TypeScript и стараюсь играть с классами, свойствами, геттерами и сеттерами. Мой первый класс только инициализировать некоторые ДАННЫЕ в базе данных WebSQL и разоблачать методы, которые считывают Infos, что я хочу использовать в других классах:Свойство Ionic2 в классе всегда пустое, даже если оно установлено в этом классе
import { Injectable } from '@angular/core';
import * as PouchDB from 'pouchdb';
@Injectable()
export class ezStockService {
private _db;
private _areas: any = [];
private _ezstockzs;
initDB(){
this._db = new PouchDB('ezstockz', {adapter: 'websql'});
var self = this;
/**
* Crée éventuellement les zones de stockage par défaut
**/
this._db.get("area_1").catch(function(error){
if(error.name === 'not_found'){
return {
_id: "area_1",
libelle:[
{
"lang": "FR-fr",
"value": "Nord"
},
{
"lang": "EN-en",
"value": "North"
}
],
"logo": "images/boussole.png"
}
}
}).then(function(gmDoc){
self._db.put(gmDoc);
});
this._db.get("area_2").catch(function(error){
if(error.name === 'not_found'){
return {
_id: "area_2",
libelle:[
{
"lang": "FR-fr",
"value": "Sud"
},
{
"lang": "EN-en",
"value": "South"
}
],
"logo": "images/boussole.png"
}
}
}).then(function(fgDoc){
self._db.put(fgDoc);
});
this._db.get("area_3").catch(function(error){
if(error.name === 'not_found'){
return {
_id: "area_3",
libelle:[
{
"lang": "FR-fr",
"value": "Est"
},
{
"lang": "EN-en",
"value": "East"
}
],
"logo": "images/boussole.png"
}
}
}).then(function(cgDoc){
self._db.put(cgDoc);
});
}
/**
* Method that retrieve all areas
**/
allAreas() {
this._db = new PouchDB('ezstockz', {adapter: 'websql'});
this._areas = [];
var self = this;
this._db.allDocs({
startkey: 'area_',
endkey: 'area_\uffff',
include_docs: true
}).then(function(areas){
var rows = areas.rows;
var zones = [];
rows.forEach((item,index) => {
var area = {
"libelle": item.doc.libelle[0].value,
"image": item.doc.logo
};
zones.push(area);
});
return zones;
}).then(function(areas){
self._areas = areas;
});
}
/**
* Method that get areas
**/
get areas(){
return this._areas;
}
}
В другом месте в мое приложение, я хотел бы перечислить все области, в целях , так, в другом классе, попытайтесь использовать участки добытчика как так:
import { Component } from '@angular/core';
import { NavController, Platform } from 'ionic-angular';
import { ezStockService } from '../../services/ez-stock.service';
@Component({
selector: 'page-stocks',
templateUrl: 'stocks.html'
})
export class Stocks {
public stocks = [];
items: any;
constructor(public navCtrl: NavController,
private platform: Platform,
private stockService: ezStockService) {
this.items = [];
var self = this;
stockService.allAreas(); // Invoke method
var areas = stockService.areas; // Invoke getter
console.log("Zones : (" + areas.length + ")");
}
}
результат console.log всегда «0», даже если allAreas метод() возвращает 3 элемента в массиве ...
Не знаю, почему это поведение, не понимаю Свойства области видимости в машинописном ...
Thx 4 Ваша помощь ...
Thx ... Означает ли это, что необходимо написать debff.resolve() в вызываемом методе? –
@ Jean-LucAubert да, вы можете –