2017-02-20 91 views
2

当在Vue.js中使用渲染函数来渲染一个dom元素时,我尝试用JavaScript重写v-if指令,如果这样的话。在Vue.js中渲染函数

export default{ 
    destroyed(){ 
     console.log("destroyed") 
    }, 
    props:['show'], 
    render(h){ 
     if(this.show){ 
      return h('div',{domProps:{innerHTML:'test'},on:{click:this.quit}}) 
     } 
    }, 
    methods:{ 
     quit(){ 
      this.$destroy(); 
     } 
    } 
} 

但是当显示为false时,Vue实例似乎不会进入destory生命周期。

如果我使用vm。$ destory方法,实例会进入destory生命周期,但dom元素仍然存在。

这是怎么发生的?

+0

我可能是错的,但我认为每个VUE组件需要渲染的至少一个元素。如果你什么都不渲染,vue可能会破坏组件。 – nils

+0

@nils谢谢。如果我返回一个元素,那么它如何触发破坏生命周期? – liajoy

回答

1
export default{ 
    destroyed(){ 
     console.log("destroyed") 
    }, 
    props:['show'], 
    render(h){ 
     if(this.show){ 
      return h('div',{domProps:{innerHTML:'test'},on:{click:this.quit}}) 
     }else { 
      return null 
     } 
    }, 
    methods:{ 
     quit(){ 
      this.$destroy(); 
     } 
    } 
} 

这里是工作提琴:https://jsfiddle.net/srinivasdamam/3s18pjrg/

+0

谢谢。但它仍然没有触发破坏生命周期。 – liajoy