是否可以在不创建计算或数据的情况下清理道具 属性

Is it possible to sanitize a prop without creating a computed or data property

假设我有一个这样定义的 vue 组件:

TestSelect.vue
<template>
  <v-select
    v-model="selectValue"
    :items="items"
    item-text="name"
    item-value="id"
    @change="changed"
  >
  </v-select>
</template>

<script>
export default {
  props: {
    link: String,
    items: Array,
    value: Number,
  },
  data: (props) => ({
    selectValue: props.value,
    saneLink: props.link.slice(-1) == "/" ? props.link : `${props.link}/`,
  }),
  methods: {
    changed(value) {
      document.location = this.saneLink + value;
    },
  },
};
</script>

这很好用,可以像这样使用:

<test-select
    link="test"
    :value="1"
    :items="[
    { id: 1, name: 'dogbert' },
    { id: 2, name: 'pointy' },
    ]"

></test-select>

或者,喜欢

<test-select
    link="test/"
    :value="1"
    :items="[
    { id: 1, name: 'dogbert' },
    { id: 2, name: 'pointy' },
    ]"

></test-select>

虽然这很好,但出于好奇和简化代码的愿望,我想知道是否有一种方法可以在不定义新数据或计算的情况下清理 prop 属性.

不幸的是,现在您只能直接在 Vue 中验证 props,而不能清理它们。

清理 props 的能力被有意移除以减少 Vue 包的大小,因为使用您提到的计算属性可以达到相同的效果。

不幸的是,这是首选方法。

但是,您可以编写一个自定义插件来执行 prop 清理。

通过粗略的 google 搜索(请不要在未先审核代码的情况下盲目使用此插件),我发现此 Vue 插件旨在允许您将 prop 强制转换为不同的值。

https://github.com/posva/vue-coerce-props

我不能保证该代码的有效性或它可能存在的任何问题,但它是使用推荐的计算属性的替代方法。