Я хочу создать кнопку активации/отключения в vue

#javascript #laravel #vue.js

Вопрос:

Это мой столик. Как вы можете видеть, я добавил кнопку для выполнения действия. Действие должно быть изменено на активное на неактивное и неактивное на активное при нажатии. Кажется, я не могу найти область SQL, к которой я мог бы получить доступ, что затрудняет обновление базы данных при нажатии. Любые предложения или помощь будут высоко оценены. Если есть какой-либо способ обновить базу данных после нажатия этой кнопки, а затем новое значение также должно появиться в таблице данных.

 <table class="table" id="myTable">
  <thead>
    <tr>
      <th>Status</th>
      <th>Action</th>
    </tr>
  </thead>
  <tbody>
    <tr v-for="product in filteredProducts" :key="product.id">
      <td>{{ product.status }}</td>
      <td>
        <div class="btn-group" role="group">
          <button class="btn btn-secondary" @click="acdcProduct(product.id)">Active/Deactive</button>
        </div>
       </td>
     </tr>
   </tbody>
 </table>
 

Вот что я пытался сделать до сих пор. Извините, я новичок в vue.js

 acdcProduct(id) { 
  this.axios
    .acdc(`http://localhost:8000/api/products/${id}`)
  let i = this.products.map(data => data.id).indexOf(id);
  this.products.status(i, active)
}
 

Ответ №1:

Пример для стороны vue, вы также должны проверить, было ли обновление базы данных успешным :

 new Vue({
  el: '#demo',
  data() {
    return {
      products: [
        {id: 1, name: 'prod 1', status: false},
        {id: 2, name: 'prod 2', status: false},
        {id: 3, name: 'prod 3', status: false},
        {id: 4, name: 'prod 4', status: false},
        {id: 5, name: 'prod 5', status: false},
      ]
    }
  },
  methods: {
    acdcProduct(id) { 
      /*this.axios
        .acdc(`http://localhost:8000/api/products/${id}`)*/
        let i = this.products.map(data => data.id).indexOf(id);
        this.products[i].status = !this.products[i].status
    }
  }
}) 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="demo">
  <table class="table" id="myTable">
    <thead>
      <tr>
        <th>Status</th>
        <th>Action</th>
      </tr>
    </thead>
    <tbody>
      <tr v-for="product in products" :key="product.id">
        <td>{{ product.status ? 'active' : 'deactive' }}</td>
        <td>
          <div class="btn-group" role="group">
            <button class="btn btn-secondary" 
                    @click="acdcProduct(product.id)"
            >
              Active/Deactive
            </button>
          </div>
        </td>
      </tr>
    </tbody>
  </table>
</div> 

Ответ №2:

пусть filteredProducts-это массив, в котором в первый раз содержатся все данные о продукте, а после обновления данных о продукте у вас есть массив продуктов обновления в ответ и снова обновите массив filteredProducts новыми обновленными данными.

 let filteredProducts = [];
acdcProduct(id) { 
      axios({
      method: "PUT",
      url: `http://localhost:8000/api/products/${id}`,
     
    }).then((res) => {
       filteredProducts = res.data
    });
            }