vue单文件组件无法获取$refs的问题


Posted in Javascript onJune 24, 2020

记录一下学习webpack+vue碰到的一个大坑,踩这个坑是我才疏学浅的表现,特此引以为戒。因为该坑实在是太坑了!

代码

header.html

<body>
  <div id="popup-wrap">
    <popup ref="popup"></popup>
  </div>
</body>

header.js

import popup from '../../components/popup/popup.vue'
import './header.scss'

let header_vue;
$(function () {
  header_vue = new Vue({
    el: '#popup-wrap',
    data: {
    },
    mounted: {
      // 输出为{popup: VueComponent}
      console.log(this.$refs);
    }
    components: {popup},
    methods: {
      pop_data: function () {
        // 输出为{}
        console.log(this.$refs);
      }
    }
  });
});
export {header_vue}

other.js

import {header_vue} from "../header/header";

$(function () {
  header_vue.pop_data()
});

popup.vue是一个普通的弹窗组件。我在header.js中引入该组件,并实例化一个header_vue使用了popup组件,然后在other.js中引入header_vue试图使用pop_data函数,该函数仅输出header_vue的$refs,经测试,该函数输出为一个空的对象,但是mounted钩子正常输出。
我就很纳闷,为啥mounted输出正常,函数调用就成空的了呢,Vue也已经挂载完成了啊。

resolve

一番气急败坏的debug后,在header.js的$(function())加上了一句console.log('ok'),结果浏览器输出了俩ok。短时间大脑的高速运转后,我发现了问题的所在:

webpack打包了两遍header.js!
所以解决的办法就是把header_vue = new Vue()改成window.header_vue = new Vue()。别处直接用就行了。

尾话

目前没搞清楚具体的bug出现原因,正常使用webpack多次引入同一个export也没有出现过此问题。但是肯定是我没学明白,有大牛知道的话麻烦解答解答。

到此这篇关于vue单文件组件无法获取$refs的问题的文章就介绍到这了,更多相关vue单文件无法获取$refs 内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
JavaScript中使用正则匹配多条,且获取每条中的分组数据
Nov 30 Javascript
jQuery点击tr实现checkbox选中的方法
Mar 19 Javascript
Jquery动态进行图片缩略的原理及实现
Aug 13 Javascript
用javascript为页面添加天气显示实现思路及代码
Dec 02 Javascript
jQuery获得内容和属性方法及示例
Dec 02 Javascript
Jquery 效果使用详解
Nov 23 Javascript
JS中的eval 为什么加括号
Apr 13 Javascript
微信小程序实现实时圆形进度条的方法示例
Feb 24 Javascript
js实现方块上下左右移动效果
Aug 17 Javascript
vue实现拖拽效果
Dec 23 Javascript
jQuery使用ajax传递json对象到服务端及contentType的用法示例
Mar 12 jQuery
有趣的JavaScript隐式类型转换操作实例分析
May 02 Javascript
JS实现数据动态渲染的竖向步骤条
Jun 24 #Javascript
javascript实现评分功能
Jun 24 #Javascript
javascript实现移动端红包雨页面
Jun 23 #Javascript
JS实现canvas简单小画板功能
Jun 23 #Javascript
javascript+Canvas实现画板功能
Jun 23 #Javascript
vue.js实现照片放大功能
Jun 23 #Javascript
vue实现点击按钮切换背景颜色的示例代码
Jun 23 #Javascript
You might like
上海永华YH-R296(华普R-96)12波段立体声收音机的分析和打理
2021/03/02 无线电
采用thinkphp自带方法生成静态html文件详解
2014/06/13 PHP
php打开本地exe程序,js打开本地exe应用程序,并传递相关参数方法
2018/02/06 PHP
QQ登录简单实现代码
2021/03/09 Javascript
Javascript实例教程(19) 使用HoTMetal(6)
2006/12/23 Javascript
js 新浪的一个图片播放图片轮换效果代码
2008/07/15 Javascript
对JavaScript的eval()中使用函数的进一步讨论
2008/07/26 Javascript
JavaScript DOM 学习第三章 内容表格
2010/02/19 Javascript
js判断当页面无法回退时关闭网页否则就history.go(-1)
2014/08/07 Javascript
JQuery遍历json数组的3种方法
2014/11/08 Javascript
JS动态修改图片的URL(src)的方法
2015/04/01 Javascript
如何解决手机浏览器页面点击不跳转浏览器双击放大网页
2016/07/01 Javascript
KnockoutJS 3.X API 第四章之数据控制流if绑定和ifnot绑定
2016/10/10 Javascript
原生js实现商品放大镜效果
2017/01/12 Javascript
Jquery uploadify 多余的Get请求(404错误)的解决方法
2017/01/26 Javascript
基于jQuery实现简单人工智能聊天室
2017/02/10 Javascript
浅谈Vuex@2.3.0 中的 state 支持函数申明
2017/11/22 Javascript
javascript关于“时间”的一次探索
2019/07/24 Javascript
vue中的v-if和v-show的区别详解
2019/09/01 Javascript
JavaScript enum枚举类型定义及使用方法
2020/05/15 Javascript
详解JavaScript作用域、作用域链和闭包的用法
2020/09/03 Javascript
Python实现两个list对应元素相减操作示例
2017/06/09 Python
TensorFlow实现模型评估
2018/09/07 Python
Python多项式回归的实现方法
2019/03/11 Python
python 实现的发送邮件模板【普通邮件、带附件、带图片邮件】
2019/07/06 Python
解决pip安装tensorflow中出现的no module named tensorflow.python 问题方法
2021/02/20 Python
美特斯邦威官方商城:邦购网
2016/10/13 全球购物
JACK & JONES英国官方网站:欧洲领先的男装生产商
2017/09/27 全球购物
传统软件工程与面向对象的软件工程有什么区别
2012/05/31 面试题
追悼会子女答谢词
2014/01/28 职场文书
中学生自我评价范文
2014/02/08 职场文书
《满井游记》教学反思
2014/02/26 职场文书
2014年节能工作总结
2014/12/18 职场文书
2015年维修工作总结
2015/04/25 职场文书
如何写好开幕词?
2019/06/24 职场文书
HTML5简单实现添加背景音乐的几种方法
2021/05/12 HTML / CSS