vue.js - Vuejs 有多个组件共享变量和函数

标签 vue.js vuejs2

对,这更多的是练习,我还没有真正的工作场景,但我可以提供一个例子。想象一下 Facebook Messenger,您在标题中有一个聊天小部件,您可以在其中快速查看和回复消息。您也可以单击查看全部以转到消息页面。

所以对我来说,我可以看到自己有两个 Vue 组件,它们比父组件和子组件更像 sibling ,因为一个将在所有页面上使用,另一个仅在消息页面上使用。

<chat></chat> and <chat-widget></chat-widget>

现在,据我所见,小部件和聊天窗口本身的功能将以相同的方式运行,也许它们的模板会因为加载位置的不同而略有不同,但有些事情是直截了当的:

messages() {}
compose() {}
validate() {}

这些只是一些例子,因为我使用 Laravel 作为我的后端,我将使用 axios 在我的 Vue 前端和我的后端(数据库)之间发送请求。

理想情况下,我不希望这些组件复制它的功能,所以我应该简单地复制它们还是有什么方法可以存储某种父函数?

一个问题是因为异步 ajax 请求,我不能简单地调用一个返回消息的函数让我绑定(bind),至少,我认为我不能。

只是寻找一些关于如何使用 Vue 最好地做到这一点的指导,这样我就不会在我的组件中重复相同的功能。

最佳答案

您可以使用组合来创建一个“基础/抽象”组件,其他组件可以从中扩展:

https://v2.vuejs.org/v2/api/#extends

var CompA = { ... }
// extend CompA without having to call `Vue.extend` on either
var CompB = {
  extends: CompA,
  ...
}

您可以从“基/抽象”类继承功能或覆盖父类的部分功能。

您可以做的另一件事是创建混合:

https://v2.vuejs.org/v2/guide/mixins.html#ad

如果您的组件需要共享功能但又不完全相同,这会很有帮助。如果您在这些情况下使用 extend,您可能会覆盖大部分基本功能,以便在这种情况下更好。

当然,没有什么能阻止您将常用方法简单地提取到一个单独的文件中,然后将它们直接导入到您的组件中。

关于vue.js - Vuejs 有多个组件共享变量和函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46485070/

相关文章:

vue.js - 如何在vue中全局制作数据、方法和计算?

vue.js - 如何默认使用 vue/vuetify 扩展 v-expansion-panel?

javascript - vue.js 未捕获类型错误 : this. $emit 不是函数

vue.js - Vue路由器中的确切路径匹配?

javascript - 如何将 .vue 文件中的所有 css 代码放入一个 .css 文件中?

javascript - 在Vue js中访问父级子事件的数据

webpack - 在 Vue 组件中使用 3rd 方 Javascript 库

javascript - if 语句和 vuejs 重启计数器的错误

html - 如何让 Vue b-table 滚动带有固定标题的正文

javascript - 找不到模块 '../constants/links' 的声明文件 | src/constants/links.js' 隐式具有 'any' 类型