javascript - 是否有可能需要 Vue 组件的许多 Prop 之一?

标签 javascript vue.js

我正在开发一个必须接受一段文本或一个链接的 Vue 组件。当传入一个链接时,我想创建一个 anchor 标记,当输入一段文本时,我想创建一个跨度。我目前的问题是,看起来每个 Vue Prop 都有自己的验证器,即

    url: {
      type: String,
      required: true
    },
    text: {
      type: String
    }

上面的代码不能满足我的需求,因为它需要 url,这是我希望在传递文本时可选的内容。

我如何才能让这个组件按要求接受一个 url 或一段文本?

奖励:我要怎么做才能让组件只能带一个?即,如果同时传入 URL 和文本,则失败。

最佳答案

事实上,prop 验证器必须是纯函数,因为它们无法访问组件的 THIS。但是您可以通过使用一个 Object 类型的 Prop 来解决您的问题:

props:
{
  params:
  {
    type: Object,
    validator: (value) =>
    {
      return !!value && 
        Object.keys(value).length === 1 && 
        ['url', 'text'].includes(Object.keys) && 
        typeof Object.values(value)[0] === 'string' &&
        Object.values(value)[0] !== '';
    }
  }
}

关于javascript - 是否有可能需要 Vue 组件的许多 Prop 之一?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62472591/

相关文章:

javascript - 在 VueJs 中滚动添加/删除类

javascript - 来自 OpenLayers 的球面墨卡托纬度/经度,需要 EPSG :4326 format

javascript - Ember JS - Handlebars 模板 - @index 在#each 中未定义

css - 如何只滚动覆盖侧边栏而不滚动整个页面

javascript - 模板中带有脚本标签的广告 [Vue.js]

javascript - 如果数据库表修改,则实时更改 Vue 组件

javascript - 如何将 HTML 表单信息传递给 javascript?

javascript - 使用 nicedit 编辑后查找内容的高度和宽度

javascript - 声音不会在A-Frame中的单击事件上停止

javascript - 不使用 webpack 或 browserify 将 .vue 文件编译成 .js 文件