Vuejs2 Vue js:_这.$emit不是一个函数
我已经创建了一个Vue组件调用imageUpload,并以v-model的形式传递属性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])
在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);
});
}
}
});