#vue.js #vuetify.js
Вопрос:
в моем приложении есть режим «просмотр» и «редактирование», и в режиме «просмотр» мне нужно установить все элементы управления только для чтения.
Я создал компонент InputWrapper с одним слотом, и моя цель состоит в том, чтобы ввести опору только для чтения в компонент v-автозаполнения внутри него. В событии смонтированного жизненного цикла InputWrapper , к которому я могу получить доступ this.$slots.default[0].componentInstance.propsData
, но когда я устанавливаю свойство только для чтения на «» (это значение появляется, когда я устанавливаю опору v-автозаполнения напрямую), ничего не происходит. Я также попытался установить это в componentOptions. Есть ли какой-нибудь способ добиться этого?
Это то, что у меня сейчас есть:
<template>
<v-col :cols="cols" :class="{ 'input-wrapper': true, readonly: isReadOnly }">
<slot></slot>
</v-col>
</template>
<script>
export default {
name: 'InputWrapper',
mounted() {
if (this.isReadOnly) {
this.$set(this.$slots.default[0].componentOptions.propsData, 'readonly', '');
}
},
computed: {
isReadOnly() {
return this.readonly || this.$route.params.action === 'view';
}
},
props: {
readonly: {
type: Boolean
},
cols: {
type: Number
}
}
};
</script>
Комментарии:
1. можем ли мы увидеть примеры кода? что это за компонент Vuetify?
2. Это v-автозаполнение, но оно также может быть применено к v-текстовому полю. Я добавил код
3. Похоже, он устанавливается только один раз. на горе. Не могли бы вы попробовать с часами и обновить этот.$, установленный только для чтения, со значением
null
или'readonly'
в зависимости от значения IsReadOnly.4. Я пытался, но безуспешно. В конце концов, я решил расширить VAutocomplete и переопределить свойство IsReadOnly, вычисляемое
Ответ №1:
В конце концов, я решил расширить VAutocomplete и переопределить свойство IsReadOnly. Поскольку у меня есть особый случай, когда мне также нужно включить элемент управления в режиме просмотра, я установил значение по умолчанию для свойства только для чтения равным нулю.
<script>
import { VAutocomplete } from 'vuetify/lib';
export default VAutocomplete.extend({
name: 'auto-complete',
computed: {
isReadonly() {
return
this.readonly ||
(this.$route.params.mode == 'view' amp;amp; this.readonly !== false);
}
},
props: {
readonly: {
type: Boolean,
default: null
}
}
});
</script>