zoukankan      html  css  js  c++  java
  • 通过this.$refs.name来获取会报错name is undefined

    报错原因 :
    1,必须要等页面中的ref子组件加载完毕,才可以获取到
    2,在生命周期mounted之前的钩子函数中去调用会获取不到,原因是DOM节点都没有生成。
    3, this.refs的组件在v-if为false的父节点下,导致这个子组件未渲染,所以获取不到。

    特殊情况 :调用对象是不是数组列表
    设置ref在v-for列表上时,直接获取this.$refs.name.style,永远是空的
    this.$refs.name是一个数组,无法通过 .style 获取样式
    只能遍历这个this.$refs.name数组,在this.$refs.name[index]上设置样式

    总结 : 一定是组件已经渲染成功才能调用组件的数据。而不是页面加载完成后就一定能获取到
    ref本身是作为渲染结果被创建的,在渲染的时候是不能访问的,$refs不是响应式的,只在组件渲染完成后才填充

    一个比较常见的场景:在一个弹窗打开的时候立刻通过this.$refs.dialog来获取内容就会出现dialog is undefined的错误

    <div v-if="flag">
          <el-dialog ref="dialog"></el-dialog>
    <div>
    

    在调用前检查flag是否是false,如果是赋值为true(数组改变要获取dom要用$nextTick)

    this.flag = true
    this.$nextTick(() => {
      console(this.$refs.dialog)
    })
    
  • 相关阅读:
    JavaWeb 内存马一周目通关攻略
    Android应用攻与防
    JavaWeb 内存马二周目通关攻略
    Mysql 5.7 windows安装 zip安装
    [JavaScript] 单例模式
    [JavaScript] 策略模式
    Leecode刷题笔记
    Java面经
    一些开源项目在ARM上的移植
    ffmpeg和SDL的多媒体编程(二)输出到屏幕
  • 原文地址:https://www.cnblogs.com/wmt-kilig/p/14016142.html
Copyright © 2011-2022 走看看