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 相关文章推荐
超轻量级的基于jquery的三级展开列表
Apr 26 Javascript
js中判断Object、Array、Function等引用类型对象是否相等
Aug 29 Javascript
js实现的复制兼容chrome和IE
Apr 03 Javascript
node.js中的http.response.write方法使用说明
Dec 14 Javascript
JavaScript中实现Map的示例代码
Sep 09 Javascript
js操作cookie保存浏览记录的方法
Dec 25 Javascript
微信小程序 教程之wxapp 视图容器 view
Oct 19 Javascript
详解Vue中数组和对象更改后视图不刷新的问题
Sep 21 Javascript
angular6的响应式表单的实现
Oct 10 Javascript
javascript读取本地文件和目录方法详解
Aug 06 Javascript
js面试题之异步问题的深入理解
Sep 20 Javascript
动态实现element ui的el-table某列数据不同样式的示例
Jan 22 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
一篇入门的php Class 文章
2007/04/04 PHP
php数组编码转换示例详解
2014/03/11 PHP
PHP正则提取不包含指定网址的图片地址的例子
2014/04/21 PHP
PHP页面输出时js设置input框的选中值
2016/09/30 PHP
PHP操作Postgresql封装类与应用完整实例
2018/04/24 PHP
js 页面输出值
2008/11/30 Javascript
JavaScript ECMA-262-3 深入解析.第三章.this
2011/09/28 Javascript
js中把JSON字符串转换成JSON对象最好的方法
2014/03/21 Javascript
jquery获取对象的方法足以应付常见的各种类型的对象
2014/05/14 Javascript
node.js中的fs.lstatSync方法使用说明
2014/12/16 Javascript
浅谈javascript中replace()方法
2015/11/10 Javascript
微信小程序开发之大转盘 仿天猫超市抽奖实例
2016/12/08 Javascript
Angular2入门--架构总览
2017/03/29 Javascript
webpack+vue中使用别名路径引用静态图片地址
2017/11/20 Javascript
jQuery创建及操作xml格式数据示例
2018/05/26 jQuery
layui的table单击行勾选checkbox功能方法
2018/08/14 Javascript
微信小程序实现的3d轮播图效果示例【基于swiper组件】
2018/12/11 Javascript
vue.js 打包时出现空白页和路径错误问题及解决方法
2019/06/26 Javascript
js函数和this用法实例分析
2020/03/13 Javascript
react结合bootstrap实现评论功能
2020/05/30 Javascript
Vue 实现拨打电话操作
2020/11/16 Javascript
Python中处理字符串之endswith()方法的使用简介
2015/05/18 Python
python selenium UI自动化解决验证码的4种方法
2018/01/05 Python
python+matplotlib实现鼠标移动三角形高亮及索引显示
2018/01/15 Python
对pandas处理json数据的方法详解
2019/02/08 Python
python 定时器,实现每天凌晨3点执行的方法
2019/02/20 Python
python用win32gui遍历窗口并设置窗口位置的方法
2019/07/26 Python
Python全栈之列表数据类型详解
2019/10/01 Python
python递归调用中的坑:打印有值, 返回却None
2020/03/16 Python
美国护肤咨询及美容产品电商:Askderm
2017/02/24 全球购物
C,C++的几个面试题小集
2013/07/13 面试题
化工专业应届生求职信
2013/11/08 职场文书
商务代表岗位职责
2015/02/15 职场文书
小学国庆节活动总结
2015/03/23 职场文书
Go语言编译原理之变量捕获
2022/08/05 Golang
CSS中理解层叠性及权重如何分配
2022/12/24 HTML / CSS