微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用 vuejs 计算属性评估文本区域的最大长度?

如何解决如何使用 vuejs 计算属性评估文本区域的最大长度?

我有一个文本区域,我用它来写一些东西的描述。但是,最大字符限制为 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>

解决方法

计算属性必须返回某些计算的结果。 在这里,观察者会更合适。在这种情况下,要观察的值将是 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: "",commentValidationState: null
      }
    }
  },}
</script>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。