首页 > 其他分享 >vue中this.$refs获取不到组件元素的解决办法

vue中this.$refs获取不到组件元素的解决办法

时间:2023-06-16 12:56:23浏览次数:60  
标签:解决办法 vue graph refs 获取 relation text 组件

vue中this.$refs获取不到组件元素的解决办法
http://www.allyns.cn/info/162

当我们在vue开发中遇到使用this.$refs报错获取不到组件元素时。

<template>
  <div class="dataQueryEventGraphDialog">
    <hg-dialog :title="title" :width="950" :height="485" :visible="dialogVisible" @close="handleClose">
        <div class="graph" ref="graph" style="height:calc(100vh - 50px);">
            <RelationGraph ref="seeksRelationGraph" :options="graphOptions" :on-node-click="onNodeClick" :on-line-click="onLineClick"/>
        </div>
    </hg-dialog>
  </div>
</template>
<script>
import HgDialog from '@/components/dialog';
import RelationGraph from '@/components/relationGraph'
export default {
 ....//
  watch: {
    show(val) {
      this.dialogVisible = val;
      if(this.dialogVisible){
        this.showSeeksGraph();
      }
    }
  },
  methods: {
    showSeeksGraph() {
    var graph_json_data = {
        rootId: 'a',
        nodes: [
        // node配置选项:http://relation-graph.com/#/docs/node
        // node支持通过插槽slot完全自定义,示例:http://relation-graph.com/#/demo/adv-slot
        { id: 'a', text: 'A', borderColor: 'yellow' },
        { id: 'b', text: 'B', color: '#43a2f1', fontColor: 'yellow' },
        { id: 'c', text: 'C', nodeShape: 1, width: 80, height: 60 },
        { id: 'e', text: 'E', nodeShape: 0, width: 150, height: 150 }
        ],
        lines: [
        // link配置选项:http://relation-graph.com/#/docs/link
        { from: 'a', to: 'b', text: '关系1', color: '#43a2f1' },
        { from: 'a', to: 'c', text: '关系2' },
        { from: 'a', to: 'e', text: '关系3' },
        { from: 'b', to: 'e', color: '#67C23A' }
        ]
    }
    this.$refs.seeksRelationGraph.setJsonData(graph_json_data, (seeksRGGraph) => {
        // Called when the relation-graph is completed 
    })
    },
    onNodeClick(nodeObject, $event) {
    console.log('onNodeClick:', nodeObject)
    },
    onLineClick(linkObject, $event) {
    console.log('onLineClick:', linkObject)
    }
  }
};

主要原因就是组件还没有加载完毕,然后就调用了组件内的属性,导致报错Cannot read properties of undefined (reading 'setJsonData')" 无法读取未定义的属性。

1、必须要等页面中的ref子组件加载完毕,才可以获取到
2、在mounted之前的钩子函数中获取不到,可以用this.$nextTick(()=>{})
3、组件在v-if的作用下,导致这个子组件未渲染,也是导致获取不到的因素,后续等渲染出来再用refs也是获取不到的

我这里的解决方法就是调用时加上this.$nextTick(()=>{})

show(val) {
   this.dialogVisible = val;
    if(this.dialogVisible){
      this.$nextTick(()=>{
          this.showSeeksGraph();
      })
    }
  }

 

标签:解决办法,vue,graph,refs,获取,relation,text,组件
From: https://www.cnblogs.com/sunny3158/p/17485282.html

相关文章

  • vuex actions 和 mutations 分析,为什么官方建议 actions 里面不要直接修改 state, 为
    来自官方大大:区分actions和mutations并不是为了解决竞态问题,而是为了能用devtools追踪状态变化。事实上在vuex里面actions只是一个架构性的概念,并不是必须的,说到底只是一个函数,你在里面想干嘛都可以,只要最后触发mutation就行。异步竞态怎么处理那是用户自己的事情。vu......
  • 如何降低Vue.js项目中Webpack打包文件的大小?
    结论结论:vue中,直接引用文件,可以让打包文件最小。试验记录下面测试项目中引入一个Button组件的代价。基准工程大小:[raywill:shop]npmrunbuild>shop@build/Users/raywill/code/vue/shop>cross-envNODE_ENV=productionwebpack--progress--hide-modulesHash:d902d9dc5e......
  • vue在线预览pdf、word、xls、ppt等office文件
    perview(row){consttypeArr=['doc','docx','ppt','pptx','xls','xlsx']letarr=row.url.split('.')letfileType=arr[arr.length-1]leturl=''......
  • vue-element-admin 上传图片慢问题处理
    vue-element-admin自带上传图片组件,在使用的过程中发现上传速度很慢,尤其是上传一些大图需要耗时几十秒不能忍受。出现这种情况,是因为upload组件会将图片上传到action="https://httpbin.org/post" ,并返回转换成base64编码格式的数据。格式类似:data:image/jpeg;base64,/9j/4AAQS......
  • 3d翻转动画 vue3 ts
    <template><section><divclass="flip-container"><divclass="cards":class="{flipped:isFlipped}"><divclass="front"></div><......
  • vue之computed
    对Vuecomputed的理解一、什么是computedVue的computed属性是一种计算属性,它的值是根据其他属性计算而来的。Vue会自动追踪computed属性所依赖的属性,并在这些属性发生变化时重新计算computed属性的值。computed属性的实现原理是使用了Vue的响应式系统。当一个computed属性被访......
  • vue的自定义指令
    自定义指令 含义vue官方提供了v-text,v-bind,v-for,v-model,v-if等常用指令,除此之外vue还允许开发者自定义指令。自定义指令分为两类:私有自定义指令全局自定义指令注意事项自定义指令使用时需要添加v-前缀指令名如果是多个单词,要使用kebab-case短横线命......
  • Vue项目入门实战(07)-想让你的Vue页面更炫酷?来学习样式绑定吧
    1class的对象绑定1.1需求现在要实现点击div区域里的helloworld文本时,文本变成红色。1.2实现<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>Vue中的样式绑定</title><scriptsrc="../vue.js&q......
  • Vue3 —— 商城项目
    create-vuecreate-vue是Vue官方新的脚手架工具,底层切换到了vite(下一代前端工具链),为开发提供极速响应。执行如下命令,这一指令将会安装并执行create-vuenpminitvue@latest无论您之前是否安装过create-vue,执行npminitvue@latest命令都会创建一个新的Vue项目。这个命令会......
  • vue时间处理
    vue时间处理https://blog.csdn.net/xc9711/article/details/123347629前言记录vue对时间的处理String与时间戳、时间互转计算时间差设置时间格式:YYYY-MM-DDHH:mm:ss年月日时分秒形式以及HH:mm:ss时分秒形式时间说明在此申明以下使用的时间相关的属性startTime:......