【发布时间】:2018-10-01 21:12:09
【问题描述】:
我一直在自学 Vue.js,并一直在利用组件来增加模块化。
我正在努力解决的一件事是从组件内部操作 Vue 实例中的变量。通过将翡翠文件中的变量作为道具传递,我已经让它在组件内与v-model 很好地配合
例如loginform(slot="login-form" v-bind:form-submit="loginSubmit" v-bind:login-data="loginData")
其中 loginData 包含变量用户名和密码,它们是组件内输入的'v-modelled'。然后在组件模板中:
<input type="password" class="text-field" v-model="formData.password" />
但是,我有一个工具提示组件,我想使用两次:一个用于用户名字段,另一个用于密码字段。这些工具提示的可见性分别由tooltips.username.vis 和tooltips.password.vis 给出。
尽管组件中的v-model 没有发出这些警告,但我似乎无法将该变量作为道具传递以便在没有得到avoid manipulating props 警告的情况下进行操作。工具提示组件如下:
Vue.component('tooltip', {
props: ['show', 'message', 'click'],
template:
<transition name="shrink">
<div v-show="show" v-on:click="click" class="tooltip">
<div class="tooltip-arrow"></div>
<div class="tooltip-container">{{message}}</div>
</div>
</transition>
});
有没有人知道如何实现所需的效果(在鼠标单击时隐藏工具提示)。我尝试将一个方法作为 click 属性传递,该方法根据工具提示是用于用户名还是密码输入而具有不同的参数,但是我得到了单击未定义的警告。我可以创建两个单独的函数,但我宁愿不明确编写两个做同样事情的函数。
【问题讨论】:
-
您的用户名/密码
v-model不会发出警告,因为您正在为道具传递一个对象,然后更新该对象中的属性。道具仍然引用同一个对象。如果你在没有包装对象的情况下传递它们,你会看到同样的警告。 -
@skirtle 啊谢谢!您刚刚回答了我对以下答案的评论。感谢您的澄清:)
标签: javascript vue.js vue-component