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 相关文章推荐
XML+XSL 与 HTML 两种方案的结合
Apr 22 Javascript
关于恒等于(===)和非恒等于(!==)
Aug 20 Javascript
JavaScript DOM学习第四章 getElementByTagNames
Feb 19 Javascript
js中escape对应的C#解码函数 UrlDecode
Dec 16 Javascript
JQuery中extend使用介绍
Mar 13 Javascript
jQuery中noConflict()用法实例分析
Feb 08 Javascript
jQuery拖拽排序插件制作拖拽排序效果(附源码下载)
Feb 23 Javascript
setTimeout函数的神奇使用
Feb 26 Javascript
vue省市区三联动下拉选择组件的实现
Apr 28 Javascript
利用JS判断客户端类型你应该知道的四种方法
Dec 22 Javascript
深入理解JavaScript和TypeScript中的class
Apr 22 Javascript
vue 全局环境切换问题
Oct 27 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
PHP4实际应用经验篇(9)
2006/10/09 PHP
php自定义加密与解密程序实例
2014/12/31 PHP
PHP中Session ID的实现原理实例分析
2019/08/17 PHP
JavaScript语句可以不以;结尾的烦恼
2007/03/08 Javascript
执行iframe中的javascript方法
2008/10/07 Javascript
JavaScript 字符串乘法
2009/08/20 Javascript
ExtJs 3.1 XmlTreeLoader Example Error
2010/02/09 Javascript
JQuery 文本框使用小结
2010/05/22 Javascript
document.documentElement的一些使用技巧
2013/04/18 Javascript
JS防止用户多次提交的简单代码
2013/08/01 Javascript
js读写cookie实现一个底部广告浮层效果的两种方法
2013/12/29 Javascript
js实现类似MSN提示的页面效果代码分享
2015/08/24 Javascript
超详细的javascript数组方法汇总
2015/11/21 Javascript
JavaScript制作简单的日历效果
2016/03/10 Javascript
Bootstrap每天必学之按钮(Button)插件
2016/04/25 Javascript
JS针对Array的各种操作汇总
2016/11/29 Javascript
JavaScript实现表单注册、表单验证、运算符功能
2018/10/15 Javascript
详解nodejs 开发企业微信第三方应用入门教程
2019/03/12 NodeJs
[01:00:14]2018DOTA2亚洲邀请赛 4.6 淘汰赛 VP vs TNC 第三场
2018/04/10 DOTA
python实现获取序列中最小的几个元素
2014/09/25 Python
Pyhton中防止SQL注入的方法
2015/02/05 Python
Django使用uwsgi部署时的配置以及django日志文件的处理方法
2019/08/30 Python
Python基础之函数原理与应用实例详解
2020/01/03 Python
python和c语言哪个更适合初学者
2020/06/22 Python
css3实现文字扫光渐变动画效果的示例
2017/11/07 HTML / CSS
SmartBuyGlasses丹麦:网上购买名牌太阳镜、眼镜和隐形眼镜
2016/10/01 全球购物
来自Ocado的宠物商店:Fetch
2018/07/10 全球购物
马来西亚奢侈品牌购物商城:Valiram 247
2020/09/29 全球购物
怎样自定义一个异常类
2016/09/27 面试题
创立科技Java面试题
2015/11/29 面试题
光信息科学与技术专业职业生涯规划
2014/03/13 职场文书
小学生纪念九一八事变演讲稿
2014/09/14 职场文书
2015元旦节寄语
2014/12/08 职场文书
一小时学会TensorFlow2之基本操作2实例代码
2021/09/04 Python
详解nginx location指令
2022/01/18 Servers
win10+RTX3050ti+TensorFlow+cudn+cudnn配置深度学习环境的方法
2022/06/25 Servers