【发布时间】:2019-01-22 15:36:50
【问题描述】:
我正在尝试在 .vue 组件中获取 DOM 元素,但我不能,因为我认为该元素尚未渲染。
如果我这样做,它会起作用:
setTimeout(() => {
$('.element').do_something();
}, 100);
但这是不好的方式。
我也尝试过这样做:
// app.js
var app = new Vue({
el: '#root',
methods: {
getElement(selector, cb()){
var el = $(selector)
if(el.length){
// I SEE THIS ELEMENT HERE
cb(el);
}else{
setTimeout(() => {
this.getElement(selector);
}, 10);
}
};
}
});
// ExampleComponent.vue
export default {
created() {
var el = app.getElement('.selector');
console.log(el);
}
}
但我在这里遇到了一个错误:
未捕获的类型错误:cb 不是函数
我也尝试使用 Promise 而不是简单的回调。
// app.js
var app = new Vue({
el: '#root',
methods: {
getElement(selector, cb()){
var el = $(selector);
if(el.length){
return new Promise((resolve) => {
// I SEE THIS ELEMENT HERE
console.log(el);
resolve(el);
});
}else{
setTimeout(() => {
this.getElement(selector);
}, 10);
}
};
}
});
// ExampleComponent.vue
export default {
created() {
app.getElement('.selector').then((el) => {
console.log(el)
});
}
}
但是 getElement 返回 undefined 并且我有一个错误:
Uncaught (in promise) TypeError: Cannot read property 'then' of undefined
对我如何访问元素有什么建议吗?
【问题讨论】:
-
您想在哪里/何时获得它?从 Vue 组件内部?在事件生命周期中的什么时候?
-
是的,在 vue 组件中,在“创建”方法中。我有路由器,它将我的组件加载到
中。加载此组件时,我需要在组件内部的元素上初始化 jquery 插件。