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 相关文章推荐
Prototype使用指南之ajax
Jan 10 Javascript
Jquery 组合form元素为json格式,asp.net反序列化
Jul 09 Javascript
JavaScript子窗口调用父窗口变量和函数的方法
Oct 09 Javascript
Jquery 垂直多级手风琴菜单附源码下载
Nov 17 Javascript
js实现五星评价功能
Mar 08 Javascript
基于JavaScript+HTML5 实现打地鼠小游戏逻辑流程图文详解(附完整代码)
Nov 02 Javascript
jquery+ajaxform+springboot控件实现数据更新功能
Jan 22 jQuery
vue中轮训器的使用
Jan 27 Javascript
node后端服务保活的实现
Nov 10 Javascript
小程序登录之支付宝授权的实现示例
Dec 13 Javascript
在vue中实现清除echarts上次保留的数据(亲测有效)
Sep 09 Javascript
Antd的table组件表格的序号自增操作
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
PHP动态变静态原理
2006/11/25 PHP
PHP JSON格式数据交互实例代码详解
2011/01/13 PHP
APACHE的AcceptPathInfo指令使用介绍
2013/01/18 PHP
PHP设计模式之观察者模式(Observer)详细介绍和代码实例
2014/04/08 PHP
php简单定时执行任务的实现方法
2015/02/23 PHP
PHP面向对象自动加载机制原理与用法分析
2016/10/14 PHP
PHP利用超级全局变量$_GET来接收表单数据的实例
2016/11/05 PHP
php基于curl实现的股票信息查询类实例
2016/11/11 PHP
PHP实现非阻塞模式的方法分析
2018/07/26 PHP
javascript 按回车键相应按钮提交事件
2009/11/02 Javascript
关于js中window.location.href,location.href,parent.location.href,top.location.href的用法与区别
2010/10/18 Javascript
JavaScript 小型打飞机游戏实现原理说明
2010/10/28 Javascript
遨游,飞飞,IE,空中网 浏览器无提示关闭方法
2011/07/11 Javascript
js代码实现随机颜色的小方块
2015/07/30 Javascript
三分钟带你玩转jQuery.noConflict()
2016/02/15 Javascript
JavaScript暂停和继续定时器的实现方法
2016/07/18 Javascript
原生JS轮播图插件
2017/02/09 Javascript
vue2.x 父组件监听子组件事件并传回信息的方法
2017/07/17 Javascript
vue使用vue-cli快速创建工程
2017/07/28 Javascript
mui back 返回刷新页面的实例
2017/12/06 Javascript
JavaScript实现一个简易的计算器实例代码
2018/05/10 Javascript
微信小程序bindinput与bindsubmit的区别实例分析
2019/04/17 Javascript
vue之a-table中实现清空选中的数据
2019/11/07 Javascript
通过实例解析JavaScript for in及for of区别
2020/06/15 Javascript
Python多线程编程(七):使用Condition实现复杂同步
2015/04/05 Python
selenium python 实现基本自动化测试的示例代码
2019/02/25 Python
使用Numpy对特征中的异常值进行替换及条件替换方式
2020/06/08 Python
Python下载网易云歌单歌曲的示例代码
2020/08/12 Python
Timberland德国官网:靴子、鞋子、衣服、夹克及配件
2019/12/10 全球购物
大学生思想汇报范文
2013/12/31 职场文书
医院标语大全
2014/06/23 职场文书
瞿秋白纪念馆观后感
2015/06/10 职场文书
《童年的发现》教学反思
2016/02/18 职场文书
庭外和解协议书
2016/03/23 职场文书
详解Python中的进程和线程
2021/06/23 Python
Go语言安装并操作redis的go-redis库
2022/04/14 Golang