【问题标题】:Vue: How to use prop value inside component templateVue:如何在组件模板中使用道具值
【发布时间】:2018-11-21 23:30:52
【问题描述】:

我正在使用来自https://alligator.io/vuejs/file-select-component/ 的通用文件选择器组件,现在我希望也能够从外部传递“接受”值。换句话说,我希望能够做类似的事情

<file-select :accept="application/json,.json"></file-select>

应该翻译成

<input type="file" accept="application/json,.json"/>

但到目前为止,我尝试将此道具的值绑定到文件输入的接受属性都失败了(例如,使用{{ accept }}this.accept)。我想知道是否可以直接在组件模板中使用 prop 值。任何想法将不胜感激!

【问题讨论】:

  • 正如您在 &lt;file-select&gt; 文档中看到的那样,没有支持 accept。所以,这是不可能的。您可以创建一个自定义组件,就像 file-select 一样,具有 prop

标签: javascript vue.js vuejs2 vue-component


【解决方案1】:

您可以扩展他们的组件以添加accept 属性,但鉴于它是一个如此小的组件,您最好更改教程中提供的代码以添加prop

Vue 添加任何non-prop attribute to the root element,因此当您执行&lt;file-select :accept="application/json,.json"&gt;&lt;/file-select&gt; 时,label 会将accept 添加为属性,如果input 是根,那么这将根据您的需要工作。

要了解如何扩展组件,还有一个 alligator.io tutorial on component composition 应该可以帮助您了解如何在 Vue 中实现这一点。但是,由于模板还没有为这个新道具做好准备,你需要完全覆盖 html。

如前所述,您可以使用他们的示例代码来创建您自己的组件,该组件接受 accept 属性并在正确的位置使用它。 扩展可能比值得拥有的好信息更麻烦。

【讨论】:

  • 为什么要扩展它?尤其是当您可以直接在 vue 模板中使用道具时?最好的做法是定义属性,然后在模板中使用:accept="propName"
  • 是的,直接添加道具在这里是正确的。我提到了扩展,但对于这个例子来说它是不合适的。但是,如果您通过 npm 或任何其他包管理器添加组件,这将是我认为的方式。看到文章后,我添加了正确的做法,但决定留下最初的建议。
【解决方案2】:

您可以访问 FileSelect 组件的原生元素并手动为其分配接受属性。

模板:

<file-select ref="fileSelect"></file-select>

js:

mounted() {
    this.$refs.fileSelect.$el.accept = "application/json,.json";
}

【讨论】:

    猜你喜欢
    • 2018-09-23
    • 1970-01-01
    • 2019-07-16
    • 1970-01-01
    • 2019-10-23
    • 2021-12-31
    • 2021-07-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多