javascript - 将数据传递给 VueJS 中的组件

标签 javascript vue.js firebase-authentication vue-component

我正在使用 VueJS,我需要将 Firebase 身份验证用户数据 (JSON) 从组件 App.vue 传递到另一个名为 Details.vue 的组件以显示该登录用户的名称。

App.vue:

export default {
    name: 'app',
    beforeCreate: function () {
      Firebase.auth().onAuthStateChanged((user) => {
        if (user) {
          this.user = user
// user is logged in now -> pass data to App.vue component here
[...]

做这件事的好方法是什么? (我是 VueJS 的新手,并尝试了一些建议的答案,例如使用“ref”<add ref="details"></add> - 不幸的是,它们都不适合我)

最佳答案

长期的解决方案是 Vuex。

如果用户是您想要拥有的唯一全局属性,您可以在根目录下创建一个数据属性,并使用 this.$root.propName 从任何组件进行访问。

例子:

// probably main.js file
new Vue({
  el: "#app",
  data: {user: null}, // added this
  components: { App },
  template: "<App/>"
});

应用程序.js:

export default {
    name: 'app',
    beforeCreate: function () {
      Firebase.auth().onAuthStateChanged((user) => {
        if (user) {
          this.$root.user = user; // set to this.$root.user instead of this.user

在任何其他组件中:

export default {
    name: 'something',
    methods: {
      printUser() { console.log(this.$root.user); }
    },
    // ...

这是一个快速的解决方案。不要滥用 $root 数据。拥有 user 就像拥有一个全局变量。使用它的代码越多,调试就越难。 Vuex 通过将所有更改集中在突变中来处理这个问题。总结:如果您发现自己需要更多 $root 属性,请直接使用 Vuex。

关于javascript - 将数据传递给 VueJS 中的组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49618871/

相关文章:

Javascript:当我调整窗口大小时,如何知道 DOM 上正在运行什么函数?

javascript - 如何在不使用 !important 的情况下覆盖 primefaces 组件内联样式?

javascript - 为 Angular Material $mdDialog 提供 Angular ui-router 状态的 url

javascript - 使用 || 很奇怪对于条件(三元)运算符是第二个选项的赋值

javascript - 如何自定义vuetify轮播箭头?

php - Firebase token 验证

ios - 当您关闭并重新打开应用程序时,如何在 iOS 上保留 Firebase 连接?

laravel - API/SPA 的用户注册

javascript - 类不随vuejs中的变量动态变化

ios - 'Web' 客户端类型不允许使用自定义方案 URI - Google with Firebase