【问题标题】:Updating element on firebase binded array on vueJs在 vueJs 上更新 firebase 绑定数组上的元素
【发布时间】:2017-05-23 15:09:02
【问题描述】:

我有这个 Orders 数组,并且在内部 div 订单上,我检查它的状态。

<div class="list-group" v-for="(order, key) in orders">
 <div class="order" v-if="checkOrderStatus(order.status)">
      <div class="dishes">
        <ul id="dishes" v-for="dish in order.dishes" >
          <li v-if="checkDishOnOrder(dish)">{{checkDishOnOrder(dish).quantity}} x {{checkDishOnOrder(dish).dishName}}</li>
        </ul>
      </div>
      <div class="notInclude">
        <ul id="notInclude" v-for="dish in order.dishes" >
          <li v-if="checkForNotInclude(dish)">{{checkForNotInclude(dish)}}</li>
        </ul>
      </div>
      <div class="table">
          <center><span id="table">{{order.tableID}}</span></center>
      </div>
      <div class="hour">
          <center><span id="hour">{{order.hour}}</span></center>
      </div>
      <div class="status">
          <center><button type="button" id="status" :class="{'doingOrder' : order.status == 'Pedido pronto', 'orderDone' : order.status == 'Pronto para entrega'}" @click="changeStatus(order)">{{order.status}}</button></center>
      </div>

    </div>
  </div>

beforeCreate: 上,我将此数组与 firebase ref 绑定:

this.$bindAsArray('orders', database.ref('orders/' + user.uid).orderByChild('hourOrder'))

问题是,每次我更改订单状态时,数组的最后一个元素都会一起更改,这不应该发生。

这是我的checkOrderStatus: 函数:

checkOrderStatus: function(orderStatus) {
      if(this.orderType == 'Em andamento') {
        if(orderStatus != "Pronto para entrega") {
          return true
        }
      } else if (this.orderType == 'Pedidos feitos') {
        if(orderStatus == "Pronto para entrega") {
          return true
        }
      }

    },

这里是changeStatus:函数:

changeStatus: function(order) {
      var that = this;
      var database = Firebase.database();
      var loggedUser = Firebase.auth().currentUser;

      if (order.status == 'Em andamento') {
        order.status = 'Pedido pronto';

        var orderKey = order['.key'];
        delete order['.key'];

        var updates = {};
        updates['orders/' + loggedUser.uid + '/'+ orderKey] = order;

        database.ref().update(updates).then(function() {
          console.log('order Updated');

        })
      }
      else if(order.status == 'Pedido pronto') {
        order.status = 'Pronto para entrega';

        var orderKey = order['.key'];
        delete order['.key'];

        var updates = {};
        updates['orders/' + loggedUser.uid + '/'+ orderKey] = order;

        database.ref().update(updates).then(function() {
          console.log('order Updated');

        })
      }

    },

【问题讨论】:

  • 您能否展示您更改订单状态的部分,因为这显然是问题所在?
  • 对不起,我忘记了。

标签: javascript firebase firebase-realtime-database vue.js vuejs2


【解决方案1】:

我找到了一种使用计算属性来避免这种行为的方法:

computed: {
  fixedOrders() {
    var database = Firebase.database();
    this.$bindAsArray('orders', database.ref('orders/' + this.userID).orderByChild('hourOrder'))
    return this.orders
  },
}

我已经在计算属性上再次绑定了数组,这样它总是有正确的订单值。

我只是担心性能损失,因为每次更改订单数组时我都会再次出价。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-03
    • 2015-08-27
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    • 2020-10-21
    • 2014-02-26
    • 2011-12-25
    相关资源
    最近更新 更多