我已经创建了一个Vue组件调用imageUpload,并将属性作为v-模型传递。
<image-upload v-model="form.image"></image-upload>
在imgeUpload组件中,我有以下代码
<input type="file" accept="images/*" class="file-input" @change="upload">
upload:(e)=>{
const files = e.target.files;
if(files && files.length > 0){
console.log(files[0])
this.$emit('input',files[0])
}
} 我收到了
Uncaught:_this.$emit不是函数
谢谢
发布于 2017-03-28 15:37:47
不要使用fat箭头来定义方法。使用:
upload: function(e){
const files = e.target.files;
if(files && files.length > 0){
console.log(files[0])
this.$emit('input',files[0])
}
} 当使用fat箭头定义方法时,可以捕获词法作用域,这意味着this将指向包含作用域(通常是window或undefined),而不是Vue。
发布于 2018-10-16 03:46:49
如果$emit不在this的当前上下文/引用上,则可能会出现此错误,可能是在承诺的then或catch方法中。在这种情况下,捕获对this的引用,然后使用它,这样对$emit的调用就成功了。
<script type="text/javascript">
var Actions = Vue.component('action-history-component', {
template: '#action-history-component',
props: ['accrual'],
methods: {
deleteAction: function(accrualActionId) {
var self = this;
axios.post('/graphql',
{
query:
"mutation($accrualId: ID!, $accrualActionId: String!) { deleteAccrualAction(accrualId: $accrualId, accrualActionId: $accrualActionId) { accrualId accrualRate name startingDate lastModified hourlyRate isHeart isArchived minHours maxHours rows { rowId currentAccrual accrualDate hoursUsed actions { actionDate amount note dateCreated } } actions {accrualActionId accrualAction actionDate amount note dateCreated }} }",
variables: {
accrualId: this.accrual.accrualId,
accrualActionId: accrualActionId
}
}).then(function(res) {
if (res.data.errors) {
console.log(res);
alert('errors');
} else {
self.$emit('accrualUpdated', res.data.data.deleteAccrualAction);
}
}).catch(function(err) {
console.log(err);
});
}
}
});
发布于 2018-07-12 16:59:43
简单地说,您可以使用upload(e) {而不是upload:(e)=>{来编写该方法,以便将这一点指向组件。
以下是完整的示例
watch: {
upload(e) {
const files = e.target.files;
if(files && files.length > 0) {
console.log(files[0]);
this.$emit('input',files[0]);
}
}
}https://stackoverflow.com/questions/43073797
复制相似问题