Javascript Vue组件是否可能需要多种道具中的一种?

Javascript Vue组件是否可能需要多种道具中的一种?,javascript,vue.js,Javascript,Vue.js,我正在开发一个Vue组件,它必须接收一段文本或一个链接。当有一个链接传入时,我想创建一个锚定标记,当有一段文本输入时,我想创建一个跨度。我目前的问题是,看起来每个Vue道具都有自己的验证器,即 url: { type: String, required: true }, text: { type: String } 上面的代码不能满足我的需要,因为它需要url,如果传递文本,我希望url是可选的 我如何使这个组件根据需要接收u

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

    url: {
      type: String,
      required: true
    },
    text: {
      type: String
    }
上面的代码不能满足我的需要,因为它需要url,如果传递文本,我希望url是可选的

我如何使这个组件根据需要接收url或文本


奖金:我该如何制作,使组件只能使用一个?i、 e.如果URL和文本都传入,则失败。

事实上,道具验证器必须是纯函数,因为它们无权访问该组件。但您可以使用Object类型的单个道具来解决问题:

道具:
{
参数:
{
类型:对象,
验证程序:(值)=>
{
return!!值&&
Object.keys(value).length==1&&
['url','text'].包括(Object.keys)&&
对象的类型。值(值)[0]=“字符串”&&
对象。值(值)[0]!='';
}
}
}

使用带有验证器的单个道具是否符合您的需要?您可以使用
computed
进行验证。这很有趣,您是否建议使用基于文本格式的计算值,就像使用正则表达式来确定传入的文本是否为链接一样?我支持@Simon所说的。您的思维方式非常困难,有时可能是不必要的。@Turna为什么不简单地使用道具验证器呢?因为只有url或文本,所以我会使用一个
属性,然后添加(如果需要)一个计算值,该值将返回类型,具体取决于它的使用方式。如果我知道url和文本在使用上有什么不同,我可以提出更好的解决方案