【问题标题】:Ionicv2 Angularfire2 v5 I cant create new items with pushIonicv2 Angularfire2 v5 我无法通过推送创建新项目
【发布时间】:2017-11-28 22:37:14
【问题描述】:

我有一个离子应用程序,我刚刚更新到新的 angularfire2 版本 5,其中 FirebaseListObservable 已被删除。

现在我这样初始化:

  items: Observable<any>;

  constructor(public navCtrl: NavController, public alertCtrl: AlertController, af: AngularFireDatabase, public actionSheetCtrl: ActionSheetController) {
    this.items = af.list('/items').valueChanges();
  }

在移除 FirebaseListObservable 之前,我只做了

items: FirebaseListObservable<any>;

在我使用 ionic Actionsheet 处理程序创建新项目并将其推送到数据库节点之前:

addItem(){
let prompt = this.alertCtrl.create({
  title: 'Name',
  message: "",
  inputs: [
    {
      name: 'title',
      placeholder: 'Name'
    },
  ],
  buttons: [
    {
      text: 'Cancel',
      handler: data => {
      }
    },
    {
      text: 'Save',
      handler: data => {
        this.items.push({
          title: data.title
        });
      }
    }
  ]
});
prompt.present();}

但是 "this.items.push({" 函数不再起作用了。我怎样才能将新项目再次推送到数据库?

在使用 FirebaseListObservable 之前没有问题。 我现在收到的错误消息是: _this.items.push 不是函数

但不知何故我找不到它的替代品。

fyi:我不太擅长观察和响应。因此,如果问题存在,请详细告诉我。

【问题讨论】:

    标签: angular ionic3 angularfire2


    【解决方案1】:

    您缺少 angularfire2 语法。 af.list('/items').valueChanges() 返回 Observable&lt;{}[]&gt; 而不是 FirebaseListObservable&lt;any&gt;

    因此请尝试以下操作:

    items: Observable<any>;
    itemsRef: AngularFireList<{}>;
    
      constructor(public navCtrl: NavController, public alertCtrl: AlertController, af: AngularFireDatabase, public actionSheetCtrl: ActionSheetController) {
        this.itemsRef = af.list('/items');
        this.items = this.itemsRef.valueChanges();
      }
    

    然后请更新添加部分,

    addItem(){
      let prompt = this.alertCtrl.create({
        title: 'Name',
        message: "",
        inputs: [
          {
            name: 'title',
            placeholder: 'Name'
          },
        ],
        buttons: [
          {
            text: 'Cancel',
            handler: data => {
            }
          },
          {
            text: 'Save',
            handler: data => {
              this.itemsRef.push({
                title: data.title
              });
            }
          }
        ]
      });
      prompt.present();
    }
    

    我建议您再阅读一下angularfire2 guide。祝你好运。

    【讨论】:

    • 谢谢本尼!你也知道如何获取列表中一项的键吗?我需要它来删除一项,现在它总是删除整个列表,包括数据库中的 /items 节点。您提到的指南说,整个列表被删除,因为没有传递给删除函数的键。我使用 removeItem(itemId: string){ this.itemsRef.remove(itemId); }
    • github.com/angular/angularfire2/blob/master/docs/rtdb/…,请再次查看本指南。 this.items = this.itemsRef.snapshotChanges().map(changes =&gt; { return changes.map(c =&gt; ({ key: c.payload.key, ...c.payload.val() })); }); 示例应用显示 crud operations 用于 firebase 实时数据库。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 2016-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多