Vuejs 输入文件表单
Vuejs input file form
在我的 vue-bootstrap 应用程序中,我想使用隐藏的输入文件控件。当我使用标准输入组件时,它可以工作(加载 1)。如果我尝试对反应式组件形式 vue-bootstrap 库执行相同的操作,则它不起作用(加载 2)。我将不胜感激任何提示我可能做错了什么。
app = new Vue({
el: "#app",
data: {
files: '',
}
})
<html>
<head>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css">
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.6.3/css/all.css" >
<script src="https://unpkg.com/vue"></script>
<script src="https://unpkg.com/bootstrap-vue@latest/dist/bootstrap-vue.js"></script>
</head>
<body>
<div id="app">
<div>
<b-button @click="$refs.fileInput1.click()"> Load 1</b-button>
<input type="file" ref="fileInput1" style="display:none;"/>
</div>
<div>
<b-button @click="$refs.fileInput2.click()"> Load 2</b-button>
<b-form-file v-model="files" style="display:none;" ref="fileInput2" />
</div>
</div>
</body>
</html>
它正在运行 fine.You 可以检查下面的内容 fiddle。
https://jsfiddle.net/tyagdvm5/
<b-form-file style="display:none;" v-model="file2" choose-label="Attachment2"></b-form-file>
或者为了获得准确的解决方案,请创建一个 fiddle 并上传 link。
这里的 $refs.fileInput2
指的是 Vue 组件,而不是真正的 input 元素,它实际上被包裹在 div 中(如果你检查渲染的元素,你可以看到它)。所以你可以做一件事(虽然它很丑而且不推荐,你至少应该把它移到 methods
部分):
app = new Vue({
el: "#app",
data: {
files: '',
}
})
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css">
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.6.3/css/all.css">
<script src="https://unpkg.com/vue"></script>
<script src="https://unpkg.com/bootstrap-vue@latest/dist/bootstrap-vue.js"></script>
<div id="app">
<div>
<b-button @click="$refs.fileInput1.click()"> Load 1</b-button>
<input type="file" ref="fileInput1" style="display:none;" />
</div>
<div>
<b-button @click="$refs.fileInput2.$el.querySelector('input[type=file]').click()"> Load 2</b-button>
<b-form-file v-model="files" style="display:none;" ref="fileInput2" />
</div>
</div>
尽管我会说您应该只使用本机文件输入元素,因为您无论如何都隐藏了 <b-form-file/>
。
在我的 vue-bootstrap 应用程序中,我想使用隐藏的输入文件控件。当我使用标准输入组件时,它可以工作(加载 1)。如果我尝试对反应式组件形式 vue-bootstrap 库执行相同的操作,则它不起作用(加载 2)。我将不胜感激任何提示我可能做错了什么。
app = new Vue({
el: "#app",
data: {
files: '',
}
})
<html>
<head>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css">
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.6.3/css/all.css" >
<script src="https://unpkg.com/vue"></script>
<script src="https://unpkg.com/bootstrap-vue@latest/dist/bootstrap-vue.js"></script>
</head>
<body>
<div id="app">
<div>
<b-button @click="$refs.fileInput1.click()"> Load 1</b-button>
<input type="file" ref="fileInput1" style="display:none;"/>
</div>
<div>
<b-button @click="$refs.fileInput2.click()"> Load 2</b-button>
<b-form-file v-model="files" style="display:none;" ref="fileInput2" />
</div>
</div>
</body>
</html>
它正在运行 fine.You 可以检查下面的内容 fiddle。 https://jsfiddle.net/tyagdvm5/
<b-form-file style="display:none;" v-model="file2" choose-label="Attachment2"></b-form-file>
或者为了获得准确的解决方案,请创建一个 fiddle 并上传 link。
这里的 $refs.fileInput2
指的是 Vue 组件,而不是真正的 input 元素,它实际上被包裹在 div 中(如果你检查渲染的元素,你可以看到它)。所以你可以做一件事(虽然它很丑而且不推荐,你至少应该把它移到 methods
部分):
app = new Vue({
el: "#app",
data: {
files: '',
}
})
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css">
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.6.3/css/all.css">
<script src="https://unpkg.com/vue"></script>
<script src="https://unpkg.com/bootstrap-vue@latest/dist/bootstrap-vue.js"></script>
<div id="app">
<div>
<b-button @click="$refs.fileInput1.click()"> Load 1</b-button>
<input type="file" ref="fileInput1" style="display:none;" />
</div>
<div>
<b-button @click="$refs.fileInput2.$el.querySelector('input[type=file]').click()"> Load 2</b-button>
<b-form-file v-model="files" style="display:none;" ref="fileInput2" />
</div>
</div>
尽管我会说您应该只使用本机文件输入元素,因为您无论如何都隐藏了 <b-form-file/>
。