gpt4 book ai didi

javascript - Vue JS this.$set 不更新 react 性

转载 作者:行者123 更新时间:2023-12-03 01:41:55 26 4
gpt4 key购买 nike

我有一个 v-for 渲染表,其中包含产品。该表有一个“事件”状态列,我希望用户能够单击事件按钮,它会变为非事件状态,或者单击非事件按钮,它会变为事件状态(基本上是一个切换开关)。

我通过对更新状态的 api 路由进行 POST 调用来实现此功能。这很好用。

问题是我无法让 vueJS 多次更新数组中受影响的对象。 this.$set 只能运行一次。如果我第二次按下切换开关,它就不再起作用。

这是我的 table :

<table class="table table-striped fancy-table">
<thead>
<tr>
<th class="text-center">&nbsp;</th>
<th>Product/Service</th>
<th class="text-center">Status</th>
<th class="text-center">Date Added</th>
<th class="text-center">QTY Sold</th>
<th class="text-center">&nbsp;</th>
</tr>
</thead>
<tbody>
<tr v-for="(service, index) in services">
<td class="text-center">
<img v-if="service.featured_image" :src="service.featured_image" class="table-thumb">
<img v-else src="/img/default-product.png" class="table-thumb">
</td>
<td>{{service.service_name}}<span class="secondary">${{parseFloat(service.price).toFixed(2)}}</span></td>
<td class="text-center">
<a href="#" v-if="service.active === 1" @click.prevent="updateStatus(service, index, 0)"><i class="fas fa-circle active"></i></a>
<a href="#" v-else="service.active === 0" @click.prevent="updateStatus(service, index, 1)"><i class="fas fa-circle inactive"></i></a>
</td>
<td class="text-center">{{ service.created_at | moment("dddd, MMMM Do YYYY") }}</td>
<td class="text-center">10</td>
<td class="text-center"><a href="#"><i class="fal fa-edit table-action-btn"></i></a></td>
</tr>
</tbody>
</table>

这是我控制更新的方法:

updateStatus: function(service, index, status) {

// Grab the authorized user
const authUser = JSON.parse(window.localStorage.getItem('authUser'))

// Add a role and refresh the list
this.$http.post('/api/vendor/services/update/' + service.id + '?updateActive=' + status, { }, { headers: { Authorization: 'Bearer ' + authUser.access_token } }).then((response) => {
// update this service
this.$set(this.services, index, response.body);
}).catch(function(error){
console.log(error);
})

}

编辑:

我已经在 v-for 表中添加了 :key 参数,但我仍然遇到同样的问题。正如您在我的网络面板中看到的,第一次单击该按钮时,它会按预期进行。使用 updateActive=0 发布到 api 路由。第二次单击按钮时,它会以 updateActive=1 的方式发布到 api 路由,并且数据在服务器端发生更改,但此时,服务数组中的我的对象尚未更新,因此它现在只是不断以 updateActive=1 的方式发布而不是显示我的其他按钮(像我想要的那样切换开关)。

这是我的网络面板的屏幕截图,其中单击了 4 次按钮。

enter image description here

最佳答案

这里的问题可能是缺少 key在你的v-for

<tr v-for="(service, index) in services">

您可以使用索引中的键,但在某些情况下也可能会导致问题(例如,当删除数组中的单个项目时,最后一个 DOM 对象将被删除,因为键会移动)

<tr v-for="(service, index) in services" :key="index">

理想情况下,您可以使用数据中的独特内容,例如

<tr v-for="(service, index) in services" :key="service.id">

关于javascript - Vue JS this.$set 不更新 react 性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50801502/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com