我创建了一个接受动态数据(th、tr、td、...)的表组件。表数据(td)可以是一个动态组件,如下所示:
<td>
<component
:is="data.content"
:colspan="data.colspan"
v-bind="data.props"
v-on="data.events"/>
</td>
...
export default {
name: "DynamicTable",
props: {
...
isLoading : { // loading slot will be used if true
type: Boolean,
default: false
}
}
}
我在另一个组件中提供所需的数据,如下所示:
<other-html-elements/>
<dynamic-table
:table-heads="tableHeads"
:table-rows="tableRows"
:is-loading="isLoading">
...
computed: { ...
tableRows () {...
new TableData(CancelOrderButton, 'component', {
props: {
order
},
events: {
'updateLoadingStatus': this.updateLoadingStatus
}
})
...
methods: { ...
updateLoadingStatus (status) {
this.isLoading = status
}
这是我的 CancelOrderButton:
methods: {
cancelOrder () {
this.$emit('updateLoadingStatus', true)
somePromise().finally(() => {
this.$emit('updateLoadingStatus', false)
})
一旦我点击一个按钮并调用 cancelOrder 方法,updateLoadingStatus 将毫无问题地发出。在 promise 解决后,它会再次发出。但处理程序不会触发。我已经检查了一切。我确定会发出事件。当我将第二个 emit 语句移出 finally 块或者如果我不将 isLoading 作为动态表的道具传递时,这个问题将得到解决。