VUE 的 focus() 方法 return 控制台错误?如何正确使用?

VUE's focus() method return a console error? How to use it correctly?

我试图专注于表单的几个元素,但第一个元素尽管已应用,但 returns 控制台出错。 这是我的模板:

  <div class="container">
    <div class="col-xs-12">
      <div class="row">
        <h1 class="animal-title">Your selection is : </h1>
      </div>

      <div class="wrapper">
        <form class="first-form" @submit.prevent="onSubmit">
          <div class="image-wrapper">
            <div class="sel-image">
              <div v-on:click="imageSelected = true" v-for="item in items" v-bind:key="item.id">
                <label>
                  <input
                    type="radio"
                    name="selectedItem"
                    ref="item"
                    :value="item.id"
                    v-model="itemFormInfo.selectedItem"
                    @change="onChangeItem($event)"
                  />
                  <img v-if="item.id === 1" src="../../assets/1.png" />
                  <img v-if="item.id === 2" src="../../assets/2.png" />
                  <img v-if="item.id === 3" src="../../assets/3.png" />
                </label>
                <p class="cie-animal-subtitle">{{item.name}}</p>
              </div>
            </div>
          </div>

          <div class="form-select">
            <div v-show="filteredStock && (imageSelected || itemFormInfo.selectedItem) > 0">
              <h1 v-if="this.itemName === 'Phone' || this.itemName === 'Tablet'" for="selectedItem" ref="itemVisible">
                Select the brand of your <span>{{this.itemName}}</span> :
              </h1>
              <h1 v-if="this.itemName === 'PC'" for="selectedBreed" ref="itemVisible">
                Select the type of your <span>{{this.itemName}}</span> :
              </h1>
              <select
                ref="brand"
                class="form-control"
                id="selectedBrand"
                v-model="itemFormInfo.selectedBrand"
                @change="onChangeBrand($event)">
                <option v-for="brand in filteredBrand" v-bind:key="brand.name">{{ brand.name }}</option>
              </select>
              <div v-show="this.isBrandSelected">
                <h1>What are you going to use your 
                  <span>{{itemName}}</span> for ?
                </h1>
                <input
                  type="text"
                  id="componentName"
                  ref="componentName"
                  class="form-control fields"
                  style="text-transform: capitalize"
                  v-model="itemFormInfo.component"
                  @keypress="formChange($event)"
                />
                <div class="loader-spinner" v-if="loading">
                  <app-loader/>
                </div>
              </div>
            </div>
          </div>
          <div class="service-options" v-show="isComponentCompleted">
            <div class="from-group">
              <h1>
                Here are the options for your <span>{{this.itemFormInfo.component}}</span> :
              </h1>
              <div class="services">
                <div class="column-service" v-for="option in options" v-bind:key="option.name">
                  <div class="service-name">{{option.name}}</div>
                  <div class="service-price">{{option.price.toString().replace(".", ",")}} </div>
                </div>
              </div>


这是我的第一个方法

    onChangeItem(event) {
      let item = event.target._value;
      this.itemName = this.getItemName(item);      
      if (this.isItemSelected = true) {
        this.isItemSelected = false;
        this.isComponentCompleted = false;
        this.isLoaderFinished = false;
        this.itemFormInfo.name = ""
      }
    this.$refs.item.focus();
    },

在我控制我的第一个输入的这个函数中,焦点工作正常,但它 returns 我通过控制台出现以下错误:

"this.$refs.item.focus is not a function at VueComponent.onChangeItem"

我看到一些类似案例的参考资料,其中涉及 setTimeout 中的参考资料或使用 this.$nextTick(() => 方法,但它在我的情况下不起作用。

我做错了什么? 一旦我选择了第一个输入的值,我如何才能专注于下一个 select 与 ref 品牌?

感谢大家的宝贵时间和提前帮助

一旦我选择了第一个输入的值,我如何才能专注于下一个 select 与 ref 品牌?

您想将焦点放在 brand 上,但您的 onChangeItem 处理程序正在调用 this.$refs.item.focus()(试图将焦点放在 item 上)。我觉得很奇怪...

错误的原因是您在 v-for.
中使用了 ref Docs当在 elements/components 上与 v-for 一起使用时,注册的引用将是一个包含 DOM 个节点或组件实例的数组

所以访问 item ref 的正确方法是 this.$refs.item[index].focus().

请注意,现在 v-for refs do not guarantee the same order as your source Array - 您可以在问题讨论中找到一些解决方法...