2017-04-20 231 views
7

如何在计算内访问$refs?第一次运行计算属性时,它始终未定义。

+1

是的,只有当第一个渲染循环完成时才定义它。对于它的价值,明确不建议在计算属性内使用$ refs,因为它不是被动的。 https://vuejs.org/v2/guide/components.html#Child-Component-Refs你可能必须找到一个更好的模式... – Cobaltway

回答

22

要回答我自己的问题,我无法在其他地方找到满意的答案。有时你只需要访问一个dom元素来进行一些计算。希望这对其他人有帮助。

我不得不欺骗Vue在组件装入后更新计算属性。

Vue.component('my-component', { 
    data(){ 
     return { 
      isMounted: false 
     } 
    }, 
    computed:{ 
     property(){ 
      if(!this.isMounted) 
       return; 
      //$refs is available 
     } 
    }, 
    mounted(){ 
     this.isMounted = true; 
    } 
}) 
+0

这样一个整洁的小动作,谢谢! – jwahdatehagh

0

对于其他用户像我这样只需要通过一些数据来支撑,我用data代替computed

Vue.component('my-component', { 
    data(){ 
     return { 
      myProp: null 
     } 
    },  
    mounted(){ 
     this.myProp= 'hello'  
     //$refs is available    
     // this.myProp is reactive, bind will work to property 
    } 
}) 
1

如果需要$refsv-if后,您可以使用updated()挂钩。

<div v-if="myProp"></div> 


updated() { 
    if (!this.myProp) return; 
    /// this.$refs is available 
},