vuetifyjs v-простая таблица — изменение статуса загрузки кнопки при нажатии

#vue.js #vuejs2 #vuetify.js

#vue.js #vuejs2 #vuetify.js

Вопрос:

У меня есть vuetifyjs v-simple-table. Я делаю v-for для заполнения некоторых данных. У меня есть кнопка в каждой строке. Когда я нажимаю на кнопку, она должна показывать статус загрузки (нажата кнопка). У меня есть следующий код

 <v-simple-table>
   <template v-slot:default>
      <thead>
         <tr>
            <th>
               Status
            </th>
            <th class="text-left">
               Actions
            </th>
         </tr>
      </thead>
      <tbody>
         <tr v-for="(item, index) in parcels" v-bind:key="index" :class="item.order.bgColorClass">
            <td>
               <div class="status">
                  <span class="a-blue">Notified </span>
                  <v-icon>mdi-star</v-icon>
               </div>
            </td>
            <td>
               <v-btn  :ref="item.order.orderId" :loading="false" text class="table-btn" @click="AddItem(item.order.orderId)">
                  <v-img src="images/plus-i.svg"></v-img>
               </v-btn>
            </td>
         </tr>
      </tbody>
   </template>
</v-simple-table>
  

Метод

   methods:{  
     AddItem(orderId) {
        this.$refs[orderId][0].loading = true;
     },
  

Приведенный выше метод показывает загрузчик, но, я думаю, это неправильный способ. Я получаю следующую ошибку на консоли

[Предупреждение Vue]: избегайте прямого изменения реквизита, поскольку значение будет перезаписываться всякий раз, когда родительский компонент повторно отображает. Вместо этого используйте данные или вычисляемое свойство на основе значения prop. Реквизит мутирует: «загрузка»

Как я могу изменить статус загрузки кнопки, когда я нажимаю на нее надлежащим образом?

Ответ №1:

Я бы взял эту кнопку и обернул ее, например:

 {
  name: "wrapped-v-btn",
  data(){
    return {
      loading: false
    }
  }
}
  
 <template>
  <v-btn  
    :loading="loading" 
    @click="loading=!loading"
    v-bind="$attrs"
  >
    <v-img src="images/plus-i.svg"></v-img>
  </v-btn>
</template>


...
<td>
  <wrapped-v-btn text class="table-btn" />
</td>