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.js学习
Jun 13 Javascript
javascript学习笔记(七) js函数介绍
Jun 19 Javascript
加随机数引入脚本不让浏览器读取缓存
Sep 04 Javascript
JavaScript实现twitter puddles算法实例
Dec 06 Javascript
JS获取iframe中longdesc属性的方法
Apr 01 Javascript
JavaScript实现仿网易通行证表单验证
May 25 Javascript
node.js入门实例helloworld详解
Dec 23 Javascript
JS实现输入框提示文字点击时消失效果
Jul 19 Javascript
jquery 实现复选框的全选操作实例代码
Jan 24 Javascript
浅谈JavaScript中的属性:如何遍历属性
Sep 14 Javascript
VUE 实现滚动监听 导航栏置顶的方法
Sep 11 Javascript
小程序分享模块超级详解(推荐)
Apr 10 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
一个没有MYSQL数据库支持的简易留言本的编写
2006/10/09 PHP
详解PHP匿名函数与注意事项
2016/03/29 PHP
PHP数学运算与数据处理实例分析
2016/04/01 PHP
Laravel最佳分割路由文件(routes.php)的方式
2016/08/04 PHP
PHP中in_array函数使用的问题与解决办法
2016/09/11 PHP
laravel创建类似ThinPHP中functions.php的全局函数
2016/11/26 PHP
Laravel 使用查询构造器配合原生sql语句查询的例子
2019/10/12 PHP
jQuery 加上最后自己的验证
2009/11/04 Javascript
Jquery AutoComplete自动完成 的使用方法实例
2010/03/19 Javascript
表格奇偶行设置不同颜色的核心JS代码
2013/12/24 Javascript
js中的getAttribute方法使用示例
2014/08/01 Javascript
JS仿iGoogle自定义首页模块拖拽特效的方法
2015/02/13 Javascript
javascript实现鼠标拖动改变层大小的方法
2015/04/30 Javascript
JavaScript 闭包机制详解及实例代码
2016/10/10 Javascript
浅谈AngularJS中ng-class的使用方法
2016/11/11 Javascript
javaScript中定义类或对象的五种方式总结
2016/12/04 Javascript
JavaScript实现格式化字符串函数String.format
2016/12/16 Javascript
vue过渡和animate.css结合使用详解
2017/06/14 Javascript
Vue2.0用 watch 观察 prop 变化(不触发)
2017/09/08 Javascript
基于vue通用表单解决方案的思考与分析
2019/03/16 Javascript
jQuery分组选择器简单用法示例
2019/04/04 jQuery
javascript实现的字符串转换成数组操作示例
2019/06/13 Javascript
微信小程序授权登陆及每次检查是否授权实例代码
2019/09/18 Javascript
微信小程序实现watch监听
2020/06/04 Javascript
Vue router传递参数并解决刷新页面参数丢失问题
2020/12/02 Vue.js
python binascii 进制转换实例
2019/06/12 Python
浅谈python opencv对图像颜色通道进行加减操作溢出
2020/06/03 Python
Python约瑟夫生者死者小游戏实例讲解
2021/01/04 Python
使用CSS3创建动态菜单效果
2015/07/10 HTML / CSS
CSS3弹性盒模型flex box快速入门心得(必看篇)
2016/05/24 HTML / CSS
白俄罗斯大卖场:21vek.by
2019/07/25 全球购物
俄罗斯女装店:12storeez
2019/10/25 全球购物
2015年清明节活动总结
2015/02/09 职场文书
2015毕业生简历自我评价
2015/03/02 职场文书
大学生实习证明
2015/06/16 职场文书
初中数学教学反思范文
2016/02/17 职场文书