我正在寻找在组件之外更改Vue变量值的最佳方法 . 我也在使用Vue webpack .
我使用vue webpack创建了一个项目 . 在其默认的App.vue文件中,我有一个变量 . 例如,我们取 showModal ,其默认值为 false . 然后我在一个javascript文件中构建它 .
<button>Register</button> {{-- event button --}}
<div id="guest"></div> {{-- Here I'm rendering my template --}}
<script src="{{ asset('js/vue-js/guest.js') }}"></script> {{-- builded Javascript file --}}
问题是我想将我的 showModal 变量更改为 true ,但事件按钮不在我的组件模板上 .
实现这一目标的最佳方法是什么?
3 回答
首先,最好的方法是考虑现有组件与关系之间的关系 . 因此,例如,如果您尝试传递的信息将用于直接兄弟或更远的链中,您可以选择
props
.如果您处理的两个组件除了当前状态之外没有任何直接关系,您将需要使用存储库模式或Vuex(类似于状态管理库的流量)进行推断,然后我们可以将引用传递给state或者传递给属性 . 存储库模式 .
以上内容可以在您的App Layer中实例化,并使用实例属性https://vuejs.org/v2/cookbook/adding-instance-properties.html在您的组件之间共享
根据您的应用程序大小,可能需要包含Vuex,我们可以将引用直接保存到我们的状态,并以类似的方式将其用作repo模式 . 虽然它是官方支持的软件包,但设置和使用更简单:
这是一个非常基本的商店,展示了我们如何将引用保存到它中,一旦我们在main中注册了商店,我们就可以在我们的组件中访问这个引用 . 这可以使用
this.$store.state.ref
完成 . 这两种方法被认为是简单简单道具的最佳方法,或类似于没有直接关系的组件的事件 Launcher .如果要访问vue之外的vue组件,可以将其注册到window对象,然后从任何地方访问它 .
现在,您可以从其他任何地方访问它
但这种“风格”被称为全球命名空间污染的原因 . ;)
我认为最好扩展您的vue应用程序,以便按钮也在vue处理的组件中 .
创建一个新的Vue实例,仅用于发出,称之为全局事件管理器 .
当你想发出一个事件(如模态)
当你想关闭模态时:
//在你的组件中
同样也可以打开模态 . 如果您正在使用vue CDN(vue的普通js文件),而不是
global.event
在创建时使用window.event
,而在使用时仅使用event
. 在浏览器中,如果使用未声明的变量,则它引用窗口对象 .