Vue js 2 - 从子组件访问 App.vue 中的数据



我对 Vue 很陌生,我正在尝试用它创建我的第一个应用程序(虽然我已经完成了整个教程,所以它不像我完全陌生(。我来自Java/Grails背景,所以这个新的"面向前端的Web应用程序"对我来说仍然很困惑。我正在使用带有 webpack 的 Vue 2。

我遇到的问题是在应用程序初始化时运行方法,该方法在 App.vue 组件中创建数据(我假设是根组件,正确吗?(,然后在子组件中访问这些数据。所以具体来说,我要做的是在"创建的"生命周期钩子中,我想检查用户是否登录,然后我想相应地更新我的导航栏(如果没有,则显示登录按钮,否则显示用户名,例如(。

我什至还没有完全弄清楚我将如何准确确定用户是否已登录,因为到目前为止,我只是尝试在 App.vue 组件中创建虚拟数据,然后在子组件中访问它。我研究过的任何地方都说我应该使用事件总线,但(我认为(这对我不起作用(如果我错了,请纠正我(,因为我能找到的唯一例子是在用户事件上调用的所有$emit函数(如按钮点击(,我希望它始终在任何地方都可以全局访问数据(并且可变异(。

因此,我将尝试向您展示我所想到的一些代码:

App.vue:

...stuff...
data() {
return {
authToken = '',
userdetails = {},
loggedIn = false
}
},
created: function() {
// check browser storage for authToken
if(authToken) {
// call rest service (through Vue Resource) to Grails backend that I set up 
// beforehand and set this.userdetails to the data that gets returned  
if(this.userdetails) {
this.loggedIn = true;
}
}
}
...stuff...

首页:

<template>
<div class="home">
<nav-bar></nav-bar>
</div>
</template>
...stuff

NavBar.vue:

<template>
<div class="navBar">
<div v-if="loggedIn">Hi {{ userdetails.name }}</div>
<div v-else>Please log in before continuing.</div>
</div>
</template>

如果其中有任何代码有任何错误,请原谅,这只是为了或多或少地显示我正在尝试做的事情,我现在大部分都编造了它。所以主要问题是:我如何让v-if="loggedIn"{{ userdetails.name }}部分工作(因为显然现在的设置方式不起作用,对吧?除此之外,任何关于 Vue js 中"全局变量"和数据流的一般建议都将不胜感激,因为我相信我的服务器端应用程序心态在前端 JavaScript 应用程序中可能不起作用。

要从父组件获取数据,您可以在子组件中使用this.$parent.userdetails

但更好的方法是使用这样的道具

https://v2.vuejs.org/v2/guide/components.html#Passing-Data-with-Props

精简模式,不适用于复杂的共享任务

您可以使用预置字段在任何位置访问全局应用程序组件(路由、组件、嵌套组件(:

this.$root

过度工程师的注意事项:在 vue 指南中正式建议将其称为"精简"方法:https://v2.vuejs.org/v2/guide/state-management.html。

显然,它不是一个架构模式化的解决方案,但可以只共享一两个变量。

在这些情况下,这种精益方法避免了开发人员导入完整的共享框架,如vuex,大量开发,专有技术要求和页面下载,只是为了这样一个微不足道的共享任务。

如果你不喜欢精简版方法,即使被挪用和官方建议,也许不是如何分享问题,而是使用哪个框架。

例如,Angular 可能最适合重型工程方法,我并不是说一个比另一个更好,我的意思是不同的仪器最适合不同的任务和方法,当需要实现更重和更复杂的解决方案时,我也使用它,在这些情况下,即使使用 vuex,我也无法处理所有组件交互和实时数据共享。

其他开发者或 vue 本身不推荐以下方法。

this.$root;

this.$parent.userdetails

在我看来,跨组件共享任何数据的最佳方法是使用 vuex 状态管理。

这是官方文档链接:https://vuex.vuejs.org/#what-is-a-state-management-pattern

相关内容

  • 没有找到相关文章

最新更新