Vuejs2 Vue js:_这.$emit不是一个函数

Vuejs2 Vue js:_这.$emit不是一个函数,vuejs2,vue-component,Vuejs2,Vue Component,我已经创建了一个Vue组件调用imageUpload,并以v-model的形式传递属性 在imgeUpload组件中 我有这个密码 我收到了 未捕获类型错误:\此。$emit不是函数 谢谢不要用粗箭头定义您的方法。使用: upload: function(e){ const files = e.target.files; if(files && files.length > 0){ console.log(files[0])

我已经创建了一个Vue组件调用imageUpload,并以v-model的形式传递属性

imgeUpload
组件中 我有这个密码

我收到了

未捕获类型错误:\此。$emit不是函数


谢谢

不要用粗箭头定义您的方法。使用:

upload: function(e){
    const files = e.target.files;
    if(files && files.length > 0){
        console.log(files[0])
        this.$emit('input',files[0])

    }
} 

当你用一个粗箭头定义你的方法时,你捕获了词法范围,这意味着
这个
将指向包含范围(通常是
窗口
,或者
未定义的
),而不是Vue。

你可以用
上传(e){
而不是
上传:(e)=>{
将此点指向组件

下面是完整的例子

watch: {
    upload(e) {
        const files = e.target.files;
        if(files && files.length > 0) {
            console.log(files[0]);
            this.$emit('input',files[0]);
        }
    }
}

如果$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);
                });
            }
        }
    });

var Actions=Vue.component('action-history-component'{
模板:“#动作历史记录组件”,
道具:[“应计”],
方法:{
deleteAction:函数(AccountalActionId){
var self=这个;
axios.post(“/graphql”,
{
查询:
“突变($AccuralId:ID!,$AccuralActionId:String!){DeleteAccuralAction(AccuralId:$AccuralId,AccuralActionId:$AccuralActionId){AccuralId AccuralRate name startingDate lastModified hourlyRate IShart是存档的minHours maxHours行{rowId CurrentAccuralActionDate AccuralDate hoursUsed动作{actionDate amount note Date Created}}{AccountalActionId AccountalActionDate金额说明dateCreated}}“,
变量:{
应计ID:this.accountry.accountalid,
AccountalActionId:AccountalActionId
}
}).然后(功能(res){
if(res.data.errors){
控制台日志(res);
警报(“错误”);
}否则{
self.$emit('AccountalUpdated',res.data.data.DeleteAccountalAction);
}
}).catch(函数(err){
控制台日志(err);
});
}
}
});

<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);
                });
            }
        }
    });