Vue的$refs属性不能再计算属性中使用

576 阅读1分钟

Vue的$refs属性不能再计算属性中使用

为了得到搜索组件的显示状态,在计算属性中写入:

computed:{
    searchFlag: function(){
        return this.$refs.search.show
    }
}

代码报错:

Error in render: "TypeError: Cannot read property 'show' of undefined"

原因:计算属性在created阶段之后,mounted之前执行;

​ $refs项在mounted之后才存在(组件渲染完成后才填充,非响应式,为了方便直接操作子组件),导致了undefined。

并且refs的变更并不会驱动计算属性的重新计算,并不是我想要的效果。

如果希望跟随着 this.$refs.search.show 值的变化而变化,可将代码写在mounted里,如下:

mounted() {
    // 监听this.$refs.search.show ,并赋值给searchFlag
    this.$watch(
      function() {
        return this.$refs.search.show;
      },
      val => {
        this.searchFlag = val;
      }
    );
  },