Let's say I have this:
<v-btn v-for="action in actions" :key="action.icon" :disabled="action.disabled" icon @click="action.click(item.id)"> <v-icon>{{ action.icon }}</v-icon> </v-btn>
The action is defined as follows:
export default { props: { rowEditingDisabled: Boolean, }, data() { return { actions: [ {icon: 'mdi-pencil', disabled: this.rowEditingDisabled, click: this.edit}, ], }; }, };
How can I update the disabled property when the component property "rowEditingDisabled" is updated?
Here is a snippet showing what I mean:
Vue.component('child', { template: ` <div> <v-btn :disabled="rowEditingDisabled">This works!</v-btn> <v-btn v-for="action in actions" :key="action.icon" :disabled="action.disabled" icon @click="action.click(item.id)"> <v-icon>{{ action.icon }}</v-icon> </v-btn> </div>`, props: { rowEditingDisabled: Boolean, }, data() { return { actions: [ {icon: 'mdi-pencil', disabled: this.rowEditingDisabled, click: this.edit}, ], }; }, }) new Vue({ el: '#app', vuetify: new Vuetify(), data() { return { isDisabled: true }; }, created() { setInterval(() => { this.isDisabled = !this.isDisabled; }, 1000); }, })
<link href="https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700,900" rel="stylesheet"> <link href="https://cdn.jsdelivr.net/npm/@mdi/font@6.x/css/materialdesignicons.min.css" rel="stylesheet"> <link href="https://cdn.jsdelivr.net/npm/vuetify@2.x/dist/vuetify.min.css" rel="stylesheet"> <div id="app"> <v-app> <v-main> <v-container> <child :row-editing-disabled="isDisabled"></child> </v-container> </v-main> </v-app> </div> <script src="https://cdn.jsdelivr.net/npm/vue@2.x/dist/vue.js"></script> <script src="https://cdn.jsdelivr.net/npm/vuetify@2.x/dist/vuetify.js"></script>
It works when I just use the prop, but when I put it into an array it doesn't work anymore.
P粉5556967382024-03-29 00:07:18
Make sure you observe the changes in props like this:
export default { props: { rowEditingDisabled: Boolean, }, data() { return { actions: [{ icon: 'mdi-pencil', disabled: false, click: this.edit }], }; }, watch: { rowEditingDisabled: function(newVal, oldVal) { // watch it console.log('Prop changed: ', newVal, ' | was: ', oldVal); this.actions[0].disabled = newVal; } }, };