无法读取未定义的属性“ref”

Posted

技术标签:

【中文标题】无法读取未定义的属性“ref”【英文标题】:Cannot read property 'ref' of undefined 【发布时间】:2018-04-25 12:31:32 【问题描述】:

我正在使用 Vue + Firebase + Vuefire 构建一个简单的网络应用程序,当我尝试在内部使用 Firebase db 变量时,我得到 “Uncaught TypeError: Cannot read property 'ref' of undefined”一个组件。

在 main.js 中

Vue.use(VueFire)

const firebaseApp = Firebase.initializeApp( //setting )

// Export the database for components to use.
export const db = firebaseApp.database()

在我的组件中

// in Recipes.vue
import db from '../main.js'

export default 
  recipe: 
    source: db.ref('recipes')
    // Console says: "Uncaught TypeError: Cannot read property 'ref' of undefined"
  

我按照本教程中的步骤https://alligator.io/vuejs/vuefire-firebase/

如果在 main.js 中使用此代码 db.ref('recipes') 可以工作,但是一旦我将它导入到我的组件中,它就不会工作。

【问题讨论】:

我在您的代码和教程之间看到的直接区别是您在导入时包含了.js 扩展名。也许您应该尝试省略它,而使用import db from '../main'。当然,我从来没有使用过导入或导出,所以我不能说这是否会解决你的问题。 观察力不错。我从来没有注意到它可以在没有 .js 扩展名的情况下工作。我试了一下,路径仍然有效,但我有同样的错误。 【参考方案1】:

问题是我的 Firebase 代码(包括 db 变量)在 main.js 内,但它需要在它自己的组件中。我创建了一个firebase.js 文件:

import Firebase from 'firebase'

const firebaseApp = Firebase.initializeApp(
  # configuration
)

// Export the database for components to use.
export const db = firebaseApp.database()

然后在我的组件中,我只是导入了我的数据库变量:

import db from '../firebase'

为什么它在main.js 中不起作用?我不确定,也许有更多知识的人可以回答这个问题。

【讨论】:

见***.com/questions/35240716/…【参考方案2】:

.ref是firebase函数,需要导入。试试

import Firebase from 'firebase'

import * from 'firebase'

【讨论】:

感谢您的帮助,我终于找到了答案。我在单独的答案中发布了解决方案。

以上是关于无法读取未定义的属性“ref”的主要内容,如果未能解决你的问题,请参考以下文章

firebase 云函数无法读取未定义的属性“ref”

TypeError:无法读取未定义 Firebase 存储反应的属性“参考”

无法读取未定义的属性“以前”[重复]

在调用 useRef 当前对象的焦点时无法读取未定义的属性(读取“焦点”)

无法读取未定义类型错误的属性“推送”:无法读取未定义错误的属性“推送”

带有 Ionic 4 的 SQLite?无法读取未定义类型错误的属性“then”:无法读取未定义的属性“then”