javascript - 页面刷新后如何获取父组件到子组件的最新数据

标签 javascript vue.js vuejs2 vue-router

我正在开发一个项目,并使用 Vue.js 作为前端。我在 main.js 文件中有以下代码。

new Vue({ // eslint-disable-line no-new
      //el: '#app',
router,
 data () {
  return {
      friends: []
  }
},
methods: {
    getFriends: function () {
        return this.friends;
    }
},
created: function () {
    this.$http.get('/user/' + this.getUserIDCookie('userID') +
        '/friends').then(function (response) {
        this.friends = response.data;
    });
},
components: {
    'nav-bar': require('./components/Navigation.vue')
},
template: `
    <div id="app">
        <nav-bar></nav-bar>
        <router-view class="router-view"></router-view>
    </div>`
}).$mount('#app');

在其中一个页面中(例如,当页面重定向到 localhost/#/user/1/details 时,我从 main.js< 检索好友列表如下所示:

<script type="text/babel">
export default {
    name: 'profile',
    data: function () {
        return {
            user: {},
            friends: []
        }
    },
    methods: {
        // Some methods
    },
    created: function () {
        this.friends = this.$root.getFriends();
    }
}
</script>

刷新当前页面时出现问题。页面刷新后,this.friends 为 null/未定义,因为 this.$root.getFriends() 返回 null/未定义。我可以将其移至 user 组件,但我想将其保留在 main.js 中,以便使用 GET 调用一次并且数据将被使用可用于整个应用程序。

任何有关如何解决此问题的意见都会很好。我使用的是Vue 2.0.1

最佳答案

实际上,您想要做的是将组件所需的数据作为 props 传递。

最简单的方法就是这个。

<router-view class="router-view" :friends="friends"></router-view>

在您的个人资料组件中,

export default {
    props:["friends"],
    name: 'profile',
    data: function () {
        return {
            user: {},
            friends: []
        }
    },
    methods: {
        // Some methods
    }
}

如果你想变得更复杂,VueRouter的更高版本允许你pass properties to routes以多种方式。

最后,如果您的应用程序变得足够复杂,那么总会有 Vuex 或其他一些状态管理工具。

关于javascript - 页面刷新后如何获取父组件到子组件的最新数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43329501/

相关文章:

Javascript ES6最佳实践,变量实例化

php - 如何检测访客的国家/地区?

javascript - Node.js Kue 如何重启失败的作业

twitter-bootstrap - Bootstrap-Vue 中按列对 <b-table> 进行排序并禁止用户排序

vue.js - 如何重新加载 vue 组件?

javascript - 如何使用jquery有效隐藏其他同伴div

javascript - Vuetify 文本字段附加槽内的按钮点击

html - 将 json 对象一个组件传递给另一个 vuejs

vue.js - Vue - 嵌套属性的默认值

javascript - Vuejs 将 props 从对象传递到动态组件