我想找到一个更漂亮的解决方案来解决这个问题:
单击设置为 trueshowUserAddModal
存储中的 var 的主要组件按钮
// App.vue
// ...
computed: {
...mapGetters('admin', [ 'showUserAddModal' ])
}
// ...
methods: {
...mapMutations('admin', [ 'setShowUserAddModal' ])
}
// ...
显示模态组件:
<div class="modal" :class="{ 'is-active': showUserAddModal }">
我想将焦点放在子子组件中本地化的输入文本
CalendarAdminUserAdd.vue
>AutoCompletion.vue
// App.vue
// ...
<div class="modal" :class="{ 'is-active': showUserAddModal }">
<div class="modal-background"></div>
<calendar-admin-user-add team-id="9" ref="calendaradminuseradd" />
</div>
// ...
// CalendarAdminUserAdd.vue
<template>
<div class="modal-card">
// ...
<auto-completion width="400px"
max-height="400px"
@input="selectUser($event)"
ref="adsearchcomponent" />
// ...
</template>
// AutoCompletion.vue
<template>
<div class="dropdown is-active">
<div class="dropdown-trigger">
<input type="text" class="input" ref="searchinput"
placeholder="Nom Prénom" v-model="searchFilter"
@keyup="searchUser" />
</div>
// ...
</template>
// ...
问题是,使用商店时,setShowUserAddModal 方法来自商店(mapMutations),并且本质上具有异步行为。而且我不知道如何捕捉模态的有效显示事件,在其上执行我的 focus() 。目前,由于 setTimeout 不佳,它可以工作:
// App.vue
// ...
watch: {
showUserAddModal : function () {
setTimeout( () => {
this.$refs.calendaradminuseradd.$refs.adsearchcomponent.$refs.searchinput.focus()
}, 500)
}
}
// ...
即使有nextTick()
它也不起作用。我将框架 CSS Bulma 用于模态,没有 Javascript,所以我认为 Bulma 不会干扰。
商店:
// store/admin.js
export default {
namespaced: true,
state: {
showUserAddModal: false
},
getters: {
showUserAddModal: state => state.showUserAddModal
},
mutations: {
setShowUserAddModal(state, showUserAddModal) {
state.showUserAddModal = showUserAddModal
}
}
}
我在这里,感谢您阅读直到这里 ;) 并感谢您的帮助!