如何访问深层嵌套父项中的方法 [Vue][Vuetify]
How to access a method in a deep nested parent [Vue][Vuetify]
我制作了一个具有 v-data-table.
的 Vue 组件
子组件
<template>
<div>
<v-data-table>
<template v-slot:item.actions="{ item }">
<v-tooltip bottom>
<template v-slot:activator="{ on, attrs }">
<v-icon @click="validation(item)"> mdi-check <v-icon/>
<span> Validar movimentação </span>
</v-tooltip>
</template>
</v-data-table>
</div>
</template>
<script>
export default {
name: "ViewDraftTable",
data() {
return {
movimentacoesSalvasHeader: [...]
}
},
methods: {
validation(item) {
this.$parent.$parent.$parent.$parent.$parent.$parent.$parent.validateMov(item)
},
}
}
</script>
在父级中,我有 validate()
方法。
我应该如何调用此方法,而不必在嵌套的 $parents
?
中导航
你应该看看 Vuex
这样的状态管理库
或使用provide/inject
一个解决方案是使用 provide/inject,其中父 provide
是方法,深度嵌套的子可以 inject
在需要的地方使用它:
// Parent.vue
export default {
provide() {
return {
validate(item) {
/* perform validation */
}
}
}
}
// ViewDraftTable.vue
export default {
inject: {
validate: {
default: item => { /* perform default validation */ }
}
},
methods: {
validacao(item) {
this.validate(item)
}
}
}
我制作了一个具有 v-data-table.
的 Vue 组件子组件
<template>
<div>
<v-data-table>
<template v-slot:item.actions="{ item }">
<v-tooltip bottom>
<template v-slot:activator="{ on, attrs }">
<v-icon @click="validation(item)"> mdi-check <v-icon/>
<span> Validar movimentação </span>
</v-tooltip>
</template>
</v-data-table>
</div>
</template>
<script>
export default {
name: "ViewDraftTable",
data() {
return {
movimentacoesSalvasHeader: [...]
}
},
methods: {
validation(item) {
this.$parent.$parent.$parent.$parent.$parent.$parent.$parent.validateMov(item)
},
}
}
</script>
在父级中,我有 validate()
方法。
我应该如何调用此方法,而不必在嵌套的 $parents
?
你应该看看 Vuex
这样的状态管理库或使用provide/inject
一个解决方案是使用 provide/inject,其中父 provide
是方法,深度嵌套的子可以 inject
在需要的地方使用它:
// Parent.vue
export default {
provide() {
return {
validate(item) {
/* perform validation */
}
}
}
}
// ViewDraftTable.vue
export default {
inject: {
validate: {
default: item => { /* perform default validation */ }
}
},
methods: {
validacao(item) {
this.validate(item)
}
}
}