如何在插件中访问 Vue $refs?
How to access Vue $refs in a plugin?
methods: {
async create () {
this.disableSubmit = true;
await this.$firestore
.collection('collectionName')
.add(this.item)
.then(() => {
this.$refs.createForm.reset();
this.$notify('positive', 'Item successfully created!');
})
.catch(error => {
this.$notify('negative', 'ERROR! Try again later!', error);
});
this.disableSubmit = false;
},
}
如果我在方法 属性 中使用上面的代码,那么一切正常,但我想从 Vue 组件外部访问该引用,例如插件,但它给我一个错误.
TypeError: "_this.$refs is undefined"
即使我只是将它作为函数导入,错误也是一样的,所以我想知道如何访问外部引用 vue
?
下面是我的插件的代码,还要说明一下,我用的是quasar框架
export let plugin = {
install (Vue, options) {
Vue.prototype.$plugin = async (collection, item) => {
return await firestore
.collection(collection)
.add(item)
.then(() => {
this.$refs.createFrom.reset();
notify('positive', 'Booking successfully created!');
})
.catch(error => {
notify('negative', 'ERROR creating booking! Try again later!', error);
});
};
}
};
我希望我的问题有道理,并在此先感谢您的帮助
您可以传递组件的上下文,以应用插件中的重置表单:
// plugin declaration
Vue.prototype.$plugin = async (collection, item, ctx) {
...
ctx.$refs.createFrom.reset()
...
}
然后当你从你的组件调用你的插件时可以这样做:
// your component
methods: {
myFunction () {
this.$plugin(collection, item, this)
}
}
this
是将在插件中使用的当前组件上下文的引用
例如:
Vue.component('my-form', {
methods: {
resetForm() {
console.log('the form has been reset')
}
}
})
Vue.prototype.$plugin = (item, ctx) => {
console.log('item passed:', item)
ctx.$refs.refToMyForm.resetForm()
}
new Vue({
el: '#app',
data: {
item: 'foo'
},
methods: {
submit() {
this.$plugin(this.item, this)
}
}
})
<script src="https://cdn.jsdelivr.net/npm/vue"></script>
<div id="app">
<my-form ref="refToMyForm"></my-form>
<button @click="submit">submit</button>
</div>
methods: {
async create () {
this.disableSubmit = true;
await this.$firestore
.collection('collectionName')
.add(this.item)
.then(() => {
this.$refs.createForm.reset();
this.$notify('positive', 'Item successfully created!');
})
.catch(error => {
this.$notify('negative', 'ERROR! Try again later!', error);
});
this.disableSubmit = false;
},
}
如果我在方法 属性 中使用上面的代码,那么一切正常,但我想从 Vue 组件外部访问该引用,例如插件,但它给我一个错误.
TypeError: "_this.$refs is undefined"
即使我只是将它作为函数导入,错误也是一样的,所以我想知道如何访问外部引用 vue
?
下面是我的插件的代码,还要说明一下,我用的是quasar框架
export let plugin = {
install (Vue, options) {
Vue.prototype.$plugin = async (collection, item) => {
return await firestore
.collection(collection)
.add(item)
.then(() => {
this.$refs.createFrom.reset();
notify('positive', 'Booking successfully created!');
})
.catch(error => {
notify('negative', 'ERROR creating booking! Try again later!', error);
});
};
}
};
我希望我的问题有道理,并在此先感谢您的帮助
您可以传递组件的上下文,以应用插件中的重置表单:
// plugin declaration
Vue.prototype.$plugin = async (collection, item, ctx) {
...
ctx.$refs.createFrom.reset()
...
}
然后当你从你的组件调用你的插件时可以这样做:
// your component
methods: {
myFunction () {
this.$plugin(collection, item, this)
}
}
this
是将在插件中使用的当前组件上下文的引用
例如:
Vue.component('my-form', {
methods: {
resetForm() {
console.log('the form has been reset')
}
}
})
Vue.prototype.$plugin = (item, ctx) => {
console.log('item passed:', item)
ctx.$refs.refToMyForm.resetForm()
}
new Vue({
el: '#app',
data: {
item: 'foo'
},
methods: {
submit() {
this.$plugin(this.item, this)
}
}
})
<script src="https://cdn.jsdelivr.net/npm/vue"></script>
<div id="app">
<my-form ref="refToMyForm"></my-form>
<button @click="submit">submit</button>
</div>