如何使用 vuejs computed 属性 评估文本区域的最大长度?
How to evaluate max length of a text area using vuejs computed property?
我在表单中有一个文本区域,我用它来写一些东西的描述。但是,最大字符限制为 5。我正在尝试使用计算的 属性 来计算我的描述的最大长度。但是,不知何故,当描述的长度超过 5 个字符的限制时,计算的 属性 不会触发。以下是我的简单代码。
props: {
infoData: {
type: Object,
default: () => {
return {
category: "",
side_categories: "",
description: "",
commentValidationState: null
};
}
},
},
computed: {
descriptionValidation(){
if(this.infoData.description?.length > 5){
alert("Max length exceeded!");
}
}
}
请注意,我在计算属性中直接使用了prop。
我的HTML:
<b-form-group
class="col-md-12"
label="Beschreibung"
label-for="description"
invalid-feedback="maximal 750 Zeichen"
:state="infoData.commentValidationState"
>
<b-textarea
class="form-control"
name="description"
id="description"
v-model="infoData.description"
/>
</b-form-group>
计算属性必须 return 某些计算的结果。
在这里,观察者会更合适。在这种情况下,要观察的值是 this.infoData.description
的长度。因此,我会首先使用计算的 属性 来获取 this.infoData.description
的长度,然后使用观察者来监视它的值。
这是我的实现:
<template>
<div>
<!--- Component HTML -->
</div>
</template>
<script>
export default {
props: {
infoData: {
type: Object,
default: () => {
return {
category: "",
side_categories: "",
description: "",
commentValidationState: null
};
}
},
},
watch: {
descriptionLength(new_value){
if(new_value> 5){
alert("Max length exceeded!");
}
}
},
computed: {
descriptionLength(){
return this.infoData.description?.length
}
}
}
</script>
这是它的父级:
<template>
<div>
<textarea v-model="infoData.description" />
<MyComponent :infoData="infoData" />
</div>
</template>
<script>
import MyComponent from '@/components/MyComponent.vue'
export default {
components: {
MyComponent,
},
data() {
return {
infoData: {
category: "",
side_categories: "",
description: "",
commentValidationState: null
}
}
},
}
</script>
我在表单中有一个文本区域,我用它来写一些东西的描述。但是,最大字符限制为 5。我正在尝试使用计算的 属性 来计算我的描述的最大长度。但是,不知何故,当描述的长度超过 5 个字符的限制时,计算的 属性 不会触发。以下是我的简单代码。
props: {
infoData: {
type: Object,
default: () => {
return {
category: "",
side_categories: "",
description: "",
commentValidationState: null
};
}
},
},
computed: {
descriptionValidation(){
if(this.infoData.description?.length > 5){
alert("Max length exceeded!");
}
}
}
请注意,我在计算属性中直接使用了prop。
我的HTML:
<b-form-group
class="col-md-12"
label="Beschreibung"
label-for="description"
invalid-feedback="maximal 750 Zeichen"
:state="infoData.commentValidationState"
>
<b-textarea
class="form-control"
name="description"
id="description"
v-model="infoData.description"
/>
</b-form-group>
计算属性必须 return 某些计算的结果。
在这里,观察者会更合适。在这种情况下,要观察的值是 this.infoData.description
的长度。因此,我会首先使用计算的 属性 来获取 this.infoData.description
的长度,然后使用观察者来监视它的值。
这是我的实现:
<template>
<div>
<!--- Component HTML -->
</div>
</template>
<script>
export default {
props: {
infoData: {
type: Object,
default: () => {
return {
category: "",
side_categories: "",
description: "",
commentValidationState: null
};
}
},
},
watch: {
descriptionLength(new_value){
if(new_value> 5){
alert("Max length exceeded!");
}
}
},
computed: {
descriptionLength(){
return this.infoData.description?.length
}
}
}
</script>
这是它的父级:
<template>
<div>
<textarea v-model="infoData.description" />
<MyComponent :infoData="infoData" />
</div>
</template>
<script>
import MyComponent from '@/components/MyComponent.vue'
export default {
components: {
MyComponent,
},
data() {
return {
infoData: {
category: "",
side_categories: "",
description: "",
commentValidationState: null
}
}
},
}
</script>