【问题标题】:Why can't I trigger input file through prop?为什么我不能通过 prop 触发输入文件?
【发布时间】:2018-08-08 01:50:01
【问题描述】:

我正在尝试打开一组文件,但通过将 prop 传递给组件(为了方便起见,我需要这个)。有没有办法做到这一点?

https://codepen.io/iliyazelenko/pen/RBejRV?editors=1010

以下代码的变体不适合我:

  <input type="file" ref="input" hidden>

  <button @click="() => { $refs.input.click() }">Choose file</button>

为什么点击但不打开文件选择?

this.$refs.input.addEventListener('click', e => {
  console.log('clicked: ', e.target)
})

【问题讨论】:

标签: vue.js vuejs2 vue-component


【解决方案1】:

如果不是从点击事件内部触发,它将不起作用。

您可以做的是在您的子组件中创建一个方法,该方法可以在事件侦听器回调中从父组件调用。

const compo = Vue.component("compo", {
  template: '<input type="file" ref="input" hidden>',
  mounted() {
    this.$refs.input.addEventListener('click', e => {
      console.log('clicked: ', e.target)
    })
  },
  methods: {
    open() {
      this.$refs.input.click()
    }
  }
})

new Vue({
  el: '#app',
  components: {
    compo
  },
  data() {
    return {
      propForComponent: false
    };
  },
  methods: {
    onClick() {
      this.$refs.compo.open()
    }
  }
})
<compo ref="compo"></compo>

<button @click="onClick">Choose file</button>

查看此更新的笔:https://codepen.io/WisdomSky/pen/GBYyGL?editors=1010

【讨论】:

  • 非常感谢您的帮助!我认为这样父子组件就会耦合。我认为使用插槽是最好的方法:codepen.io/iliyazelenko/pen/ajQvQd?editors=1010 或者我错了吗?
  • 你的代码返回 "message": "Uncaught ReferenceError: Vue is not defined",
  • @FernandoTorres 这个错误意味着你没有正确导入 Vue。
  • @JulianPaoloDayag 您的答案中的示例代码返回该错误
  • 因为我只将它用于格式化,而不是实际的工作演示。看代码就够了。
猜你喜欢
  • 1970-01-01
  • 2019-08-01
  • 2017-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-23
  • 1970-01-01
相关资源
最近更新 更多