2016-05-13 2 views
1

私はイオン2でプロバイダを持っている、と私はこれを持っている:SqlStorageイオン2

getCategory() { 
    this.storage.query('SELECT * FROM category') 
     .then((data) => { 
     var category = []; 
     if (data.res.rows.length > 0) { 
      for (var i = 0; i < data.res.rows.length; i++) { 
      category.push({ 
       name: data.res.rows.item(i).name, 
       type: data.res.rows.item(i).type, 
       note: data.res.rows.item(i).note 
      }); 
      } 
     } 
     // console.log(JSON.stringify(category)); 
     return category; // is this correct? 
     }, (error) => { 
     console.log('Error -> ' + JSON.stringify(error.err)); 
     }); 
    } 

その後、私はサービスを注入した後、自分のページにこのような何かをしたい:

constructor(nav, theservice) { 
    this.nav = nav; 
    this.service = theservice 
    this.category = service.getCategory() 
    } 

結果を返すにはどうすればよいですか?上記を試してもコンソールログが返ってきませんthis.category

how to use sqlite in ionic 2のチュートリアルは役に立ちましたが、サービス/プロバイダに変換する方法を理解できませんでした。

答えて

1

UPDATE(6月15日、'16)

私は以下の私のオリジナルの答えでリンクを共有しました。より多くの議論がスレッドで行われ、以前の回答アプローチは、仕事はベストプラクティスではないかもしれませんが。ここに更新します。

service.js

// using beta 7 ionic 2 
import {Injectable} from '@angular/core'; 
import { Storage, SqlStorage } from 'ionic-angular'; 

@Injectable() 
export class CategoryService { 
    static get parameters(){ 
    return [] 
    } 

    constructor() { 
    this.storage = new Storage(SqlStorage); 
    this.storage.query('CREATE TABLE IF NOT EXISTS category (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, type TEXT)'); 
    } 

    getCategory() { 
    return this.storage.query('SELECT id, name, type FROM category'); 
    } 
} 

を次に上記のサービスは、次のように使用されている:だけ更新を考え

somewhereInCategoryPage.jsファイル

loadCategory() { 
    this.platform.ready().then(() => { 
     this.service.getCategory() 
     .then(data => { 
      this.category = []; 
      if (data.res.rows.length > 0) { 
      for (var i = 0; i < data.res.rows.length; i++) { 
       let item = data.res.rows.item(i); 
       this.category.push({ 
       'id': item.id, 
       'name': item.name, 
       'type': item.type 
       }); 
      } 
      } 
      console.log(this.category); 
     }, error => { 
      console.log('Error', error.err) 
     }) 
    }); 
    } 

、-知っている人のために役に立つかもしれません。私は最終的に決着何参照

のためにここに残し


旧回答。ここに投稿すると、誰かを助けるかもしれません。コンストラクタでthis thread on ionic forum

サービス/プロバイダで

getCategory() { 
    var storage = new Storage(SqlStorage); 
    return new Promise(function(resolve, reject) { 
     return storage.query('SELECT name, type, note FROM category') 
      .then((data) => { 
      // kinda lazy workaround 
      resolve(data.res.rows); 
      }); 
     }); 
    } 

からのガイダンス:テンプレートで

static get parameters() { 
    return [ [Myservice] ]; 
} 
constructor(myservice) { 
    myservice.getCategory() 
    .then((category) => { 
    // recreate new array from old category array, or else: 
    // EXCEPTION: Cannot find a differ supporting object 
    // https://github.com/angular/angular/issues/6392#issuecomment-171428006 
    this.categories = Array.from(category); 
    console.log(this.categories); 
    }) 
    .catch((error) => { 
    console.log(error); 
    }); 
} 

<ion-list> 
    <button ion-item *ngFor="#category of categories"> 
     {{ category.name }} 
     <br> 
     <ion-icon name="arrow-forward" item-right></ion-icon> 
    </button> 
</ion-list> 
+0

これは良く見える、まだレコードについて、私はで考えますあなたの元の例では、この小さな変更が有効になります:service.getCategory()。then((category)=> {this.category = category}) –

+0

@ManuValdés私の元の例からのエラーは、getCategory()が約束ではないと不平を言った。約束は 'それ'を持っていますが、私の元の例では、それは – Rexford

+0

ではありませんでした。そうです、それはthis.storage.query(...)の前にreturn文がありません。 ;それはあなたがthen()(これは約束です)を返す方法です。次に、ページコンストラクタにチェーンすることができます。 –