我正在使用Vue.js为Disqus评论创建一个组件。 Disqus插件只需要一个标识为disqus_thread
的元素即可运行。我的Vue指令如下所示:
Vue.elementDirective('v-disqus',{
params:['disqusUrl','disqusId','disqusTitle','disqusCategory'],
bind(){
var dc = document.createElement('div');
dc.setAttribute('id','disqus_thread');
this.el.appendChild(dc)
setTimeout(() => {
updateComments(this.params)
},0)
}
});
updateComments()
函数(为简单起见而编辑):
var updateComments = function(params){
console.log('disqus thread:')
console.log($('#disqus_thread')[0])
...
在致电setTimeout
之前,您会看到我有updateComments()
。当我将其设置为0时,控制台有时会为undefined
记录$('#disqus_thread')[0]
。当我将它设置为大约150时,插件加载时几乎总是足够长。
所以问题是,为什么this.el.appendChild
不会立即触发,在调用updateComments()
之前我需要做些什么才能确保元素存在?
编辑:这也在v-if
内,但我认为这个元素指令在编译成真之前不会编译。