Vue.js - перенести фокус на компонент

У меня есть фрагмент формы, завернутый в компонент, который скрыт v-if, Когда пользователь нажимает кнопку, он переключает логическое значение, открывая скрытый компонент, и когда это происходит, я хотел бы перенести фокус на первый ввод формы во фрагменте.

Я пытался использовать aria-live но безрезультатно. Я подозреваю, что природа SPA мешает регистрации этих живых регионов (я предполагаю, что они должны быть зарегистрированы при визуализации страницы, так как они не кажутся отзывчивыми при вводе в DOM). Однако я не гонялся за ответом по кроличьей норе, так что это умозрительно. Затем я добавил класс к целевому вводу и попытался использовать HTMLElement.focus()

document.querySelector('.focus')[0].focus();

Это тоже не сработало. Кто-нибудь знает причину, по которой я не могу сосредоточиться на элементе, который недавно был внедрен в DOM и который виден на странице в то время?

1 ответ

Я думаю, что нужно, чтобы ваш компонент формы определил что-то, когда это mounted:

Vue.config.productionTip = false;
const template = `<div>
    <div>
      <inner v-if="showInner" />   
      <button @click="toggle">Toggle inner component</button>
    </div>
</div>`
const inner = {
  name: 'inner',
  template: '<form><input ref="textInput" type="text"/></form>',
  mounted() {
    this.$refs.textInput.focus()
  }
};
new Vue({
  template,
  data: function() {
    return {
      showInner: false
    };
  },
  methods: {
    toggle() {
      this.showInner = !this.showInner;
    }
  },
  components: {
    inner
  }
}).$mount("#app");
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="app"></div>

Другие вопросы по тегам