【发布时间】:2019-11-16 05:26:49
【问题描述】:
我有一些包含输入的组件:
<div class="some-component">
<input type="text" />
</div>
我这样称呼它:
<some-component v-on:click="dostuff" ref="thatcomponent"></some-component>
然后:
methods: {
dostuff(){
this.$refs.thatcomponent.$el.focus();
}
}
哪个专注于 div,我真的希望专注于输入。这个例子是我的第一个用例,但总的来说我想将组件上调用的所有事件传递给该组件中的特定元素。我不想在组件中四处寻找来自父组件的元素。
这有 Vue 模式吗?
【问题讨论】:
-
如果您想从组件外部(即父级)控制特定元素,最好的选择可能是简单地使用(作用域)插槽。
-
@TommyF 通常我会同意。在这种情况下,组件比此处的示例要复杂得多。此外,实际上只是希望将针对组件调用的事件传递给元素而不是完全控制。
-
你可以在那个组件中创建一个方法来聚焦你的输入,然后像这样调用它。$refs.thatcomponent.focusTheInput()
-
@AlvaroCcatamayo 单个事件的好解决方案,对于“所有事件”场景来说有点棘手。也许我只是想多了
-
另一种选择是创建一个Vue事件总线并在父组件上注册事件并在子组件上监听它们。但是您仍然必须在 EventBus 上手动注册和触发每个事件,这有点颠倒了父子 vue 组件的期望关系。但它可能对你有用,