【问题标题】:retrieve a single object from firebase and output to a form for edit从 firebase 检索单个对象并输出到表单以进行编辑
【发布时间】:2017-09-23 05:50:59
【问题描述】:

我正在尝试从 firebase 检索单个对象并输出到表单以进行编辑。我使用以下内容检索单个对象:

this.product = this.af.database.object('/products/'+ productId);

并尝试像这样将其输出到模板中:

  <ion-item>
    <ion-label stacked>Date</ion-label>
    <ion-datetime [(ngModel)]="product.date" name="date" required></ion-datetime>
  </ion-item>
  <ion-item>
    <ion-label stacked>Content</ion-label>
    <ion-input type="text" [(ngModel)]="product.content" name="content" required></ion-input>
  </ion-item>
  <ion-item>
    <ion-label stacked>Amount</ion-label>
    <ion-input type="number" [(ngModel)]="product.amount" name="amount"></ion-input>
  </ion-item>  
  <ion-item>
    <ion-label stacked>Category</ion-label>
    <ion-select type="text" [(ngModel)]="product.category" name="category" required>
      <ion-option>Book</ion-option>
      <ion-option>Baby</ion-option> 
      <ion-option>Clothing</ion-option> 
   </ion-select>
  </ion-item>  
</ion-list>

但是输出到表单的字段不起作用。请帮忙。我试过像这样应用异步运算符

    <ion-input type="number" [(ngModel)]="product.amount" name="amount" value="product.amount | async"></ion-input>

但它也不起作用。

【问题讨论】:

    标签: angular firebase ionic-framework ionic2 angularfire2


    【解决方案1】:

    您可以使用当前的 angularfire2 版本,如下所示

    controller.ts

    import { Observable } from 'rxjs/Observable';
    .......
    product : Observable<any>;
    
    constructor(public db: AngularFireDatabase) {
        this.product = this.db.object('/products/'+ productId)
            .snapshotChanges().map(res => {
                return res.payload.val();
            });
    }
    

    html

    <ion-input type="number" value="{{(product|async)?.amount}}" [(ngModel)]="product.amount" name="amount"></ion-input>
    

    【讨论】:

      【解决方案2】:

      你必须实现subscribe pattern,如下所示。

      service.ts

       product : FirebaseObjectObservable<data-type>;
      
       constructor(public af: AngularFire) {}
      
        //get product
        getProduct(productId : string): FirebaseObjectObservable<data-type> {
          return this.product = this.af.database.object('/products/'+ productId);
        }
      

      page.ts

      public product: data-type;
      
      constructor(public service: Service) {
      
          this.service.getProduct(productId).subscribe(snap => {
            this.product = snap;
          });
        }
      

      【讨论】:

      • 我试过了,还是不行。错误消息:未捕获(承诺中):错误:管道 'AsyncPipe' 的 InvalidPipeArgument: '[object Object]' 错误:管道'AsyncPipe'的 InvalidPipeArgument: '[object Object]'
      • 这是我的荣幸 :)
      猜你喜欢
      • 2019-12-07
      • 1970-01-01
      • 2023-03-29
      • 1970-01-01
      • 2016-10-15
      • 1970-01-01
      • 1970-01-01
      • 2018-10-17
      • 1970-01-01
      相关资源
      最近更新 更多