【问题标题】:Populate Vuejs input field with Firebase when Variables are out of scope当变量超出范围时,使用 Firebase 填充 Vuejs 输入字段
【发布时间】:2018-04-17 09:09:21
【问题描述】:

我知道 Firebase 异步返回数据,所以我实际上将变量放在了once() 函数中。但我无法访问变量 叫 whatever。在写这个问题时,我还想我可以尝试将 firebase 数据直接设置为 data()

我的问题是如何在 VueJS data() 函数中传递数据,以便当用户刷新或重新登录数据时,在这两个不同选项中填充输入字段?

 <template lang="html">
        <div class="">
              <label for="">Name</label>
              <input id="nameId" type="text" v-model="name" />
        </div>
    </template>


export default {
  name: 'app',
  data () {
    return {
      name: '',
    }
  },
  methods:{
    var whatever = [];

    var query = dbRef.orderByKey();
    query.once('value')
         .then(function (snapshot) {
             snapshot.forEach(function(childSnapshot) {
                 var childData = childSnapshot.child('name').val();
                 this.whatever.push(childData);

                 // Option 1: use out of scope 
                 this.name = whatever;

                 // Option 2: directly populate data
                 this.name = childData;

             });
         });


}

【问题讨论】:

  • 这不是有效的 javascript。
  • 这没有多大帮助:(
  • 您没有在方法块中定义方法。现在方法块中的所有代码,将其包装在一个命名函数中。但这仍然需要在某些时候被调用。所以要么从挂载的生命周期方法中调用它,要么不使用方法,使用计算属性。

标签: firebase vue.js vuefire


【解决方案1】:

尝试以下内容,其中包含我评论中的更改。澄清一下,使用计算属性来执行查询是理想的,因为它将在生命周期的某个点执行。

您也可以使用方法,但您必须在某些时候调用它 - 您在页面重新加载时提到,那么其中一个组件生命周期挂钩将是理想的。

以下是计算属性方法。该属性绑定到 v-model,因此 Vue 也可能会强制您也定义一个 setter,但这很简单。

export default {
  name: 'app',
  data() {
    return {
      name: '',
    }
  },
  computed: {
    fullName() {
      var query = dbRef.orderByKey();
      query.once('value')
        .then((snapshot) => {
          snapshot.forEach((childSnapshot) => {
            this.name = childSnapshot.child('name').val();
          });
        });
    }
  }
}


<template lang="html">
  <div class="">
    <label for="">Name</label>
    <input id="nameId" type="text" v-model="fullName" />
  </div>
</template>

【讨论】:

  • 嗨,8bit!谢谢!!我把它放在计算属性中......因为它肯定更有意义。但是什么也没发生,“this.name”在方法中没有显示类型错误“无法设置未定义的属性'name'”。如何从 Firebase 获取该值以传递给“名称”?再次感谢!
  • 也就是说,好像是范围问题吧?...where "this.name" 没有找到 vue 实例中的数据。
  • 我已经更新了使用箭头函数的答案,因为它们将确保“this”从箭头函数的封闭范围传播。 “This”现在应该指向组件实例,并且应该可以访问数据属性名称。
  • 是的!做到了! @8bit 谢谢!!我还将该函数移至“created()”生命周期挂钩,以便在用户重新登录时从 firebase 加载现有数据!
猜你喜欢
  • 1970-01-01
  • 2020-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-02
  • 2013-04-17
  • 2020-06-09
  • 2015-02-08
相关资源
最近更新 更多