如何在JS文件中获取Vue组件


Posted in Javascript onSeptember 16, 2020

1. 背景

最近在写项目时候遇到这样一个需求:

  • 我封装了一个js文件 utils.js,然后在组件 my-component.vue 中引用了该js文件。
  • utils.js 文件中有一些函数,需要操作 my-component.vue 中的 datamethods

为了方便理解,上述 js 文件和组件名非实际工程中的名字,仅是示例。

2. 思路

通过调用函数把 组件实例 this 传递到 被应用的 js 文件 里。

3. 目录结构

src/
├── App.vue
├── assets
├── main.js
├── components
└── views
  └── demo
    ├── my-component.vue
    └── utils.js

4. 代码实现

utils.js 中定义一个变量和一个函数,该变量用于存放组件实例 this,该函数用于接收组件实例 this

utils.js

// 用来存放调用此js的vue组件实例(this)
let vm = null

const sendThis = ( _this )=> {
  vm = _this
}

export default {
  sendThis, // 暴露函数
  description: '我是一个工具类方法',
  getData() {
    console.log(vm) // 打印拿到的组件实例
    console.log(vm.userProfile) // 打印组件中的data
  },
  callMethod() {
   vm.clearForm() // 调用组件中的methods
  }
}

my-component.vue 中引入 utils.js,然后在钩子函数中调用 utils.js sendThis 方法,把 this 传过去即可。

my-component.vue

<template>
 <div class="my-component"></div>
</template>

<script>
import utils from './utils'

export default {
 name: 'MyComponent',
 data() {
  return {
   userProfile: ''
  }
 },
 mounted() {
  // 发送this 到 js 文件里
  utils.sendThis(this);
 },
 methods: {
  // 这个函数会在 utils.js 文件中被调用
  clearForm() {
   // 执行一些操作
  },
  // 打印 utils.js 中的 description
  showMsg() {
   console.log(utils.description)
  }
 }
}
</script>

5. 其它思路

还有一种思路:

把一些属性和方法挂载到 vue 实例原型上,自然也就可以在某个 js 文件中拿到 vue 实例了。

以上就是如何在JS文件中获取Vue组件的详细内容,更多关于在JS文件中获取Vue组件的资料请关注三水点靠木其它相关文章!

Javascript 相关文章推荐
js调用flash的效果代码
Apr 26 Javascript
javascript 处理HTML元素必须避免使用的一种方法
Jul 30 Javascript
jQueryPad 实用的jQuery测试工具(支持IE,chrome,FF)
May 22 Javascript
jQuery对象[0]是什么含义?
Jul 31 Javascript
麻雀虽小五脏俱全 Dojo自定义控件应用
Sep 04 Javascript
js触发select onchange事件的小技巧
Aug 05 Javascript
JavaScript学习笔记整理之引用类型
Jan 22 Javascript
高效利用Angular中内置服务$http、$location等
Mar 22 Javascript
JQuery的attr 与 val区别
Jun 12 Javascript
很棒的vue弹窗组件
May 24 Javascript
Vue使用高德地图搭建实时公交应用功能(地图 + 附近站点+线路详情 + 输入提示+换乘详情)
May 16 Javascript
讲解vue-router之什么是动态路由
May 28 Javascript
javascript自定义加载loading效果
Sep 15 #Javascript
图解JS原型和原型链实现原理
Sep 15 #Javascript
vue实现简单全选和反选功能
Sep 15 #Javascript
vscode 调试 node.js的方法步骤
Sep 15 #Javascript
js实现特别简单的钟表效果
Sep 14 #Javascript
仿照Element-ui实现一个简易的$message方法
Sep 14 #Javascript
vue swipeCell滑动单元格(仿微信)的实现示例
Sep 14 #Javascript
You might like
PHP常用的排序和查找算法
2015/08/06 PHP
php实现图片上传、剪切功能
2016/05/07 PHP
静态页面的值传递(三部曲)
2006/09/25 Javascript
JQuery的Alert消息框插件使用介绍
2010/10/09 Javascript
JavaScript 对任意元素,自定义右键菜单的实现方法
2013/05/08 Javascript
js实现鼠标悬停图片上时滚动文字说明的方法
2015/02/17 Javascript
深入理解JavaScript系列(40):设计模式之组合模式详解
2015/03/04 Javascript
JS实现控制表格内指定单元格内容对齐的方法
2015/03/30 Javascript
jQuery插件datalist实现很好看的input下拉列表
2015/07/14 Javascript
JS获取子窗口中返回的数据实现方法
2016/05/28 Javascript
JavaScript微信定位功能实现方法
2016/11/29 Javascript
JS正则验证多个邮箱完整实例【邮箱用分号隔开】
2017/04/19 Javascript
AngularJS 验证码60秒倒计时功能的实现
2017/06/05 Javascript
nodejs模块学习之connect解析
2017/07/05 NodeJs
axios简单实现小程序延时loading指示
2018/07/30 Javascript
解决angularJS中input标签的ng-change事件无效问题
2018/09/13 Javascript
vue项目首屏加载时间优化实战
2019/04/23 Javascript
vscode+gulp轻松开发小程序的完整步骤
2020/10/18 Javascript
jQuery列表动态增加和删除的实现方法
2020/11/05 jQuery
vue使用exif获取图片经纬度的示例代码
2020/12/11 Vue.js
浅析JavaScript中的事件委托机制跟深浅拷贝
2021/01/20 Javascript
[36:05]DOTA2亚洲邀请赛 3.31 小组赛 A组 Liquid vs Optic
2018/04/01 DOTA
window下eclipse安装python插件教程
2017/04/24 Python
Python二叉树的定义及常用遍历算法分析
2017/11/24 Python
Python使用matplotlib绘制三维图形示例
2018/08/25 Python
使用python爬取抖音视频列表信息
2019/07/15 Python
利用Python自动化操作AutoCAD的实现
2020/04/01 Python
Keras-多输入多输出实例(多任务)
2020/06/22 Python
GOLFINO英国官网:高尔夫服装
2020/04/11 全球购物
环境科学专业大学生自荐信格式
2013/09/21 职场文书
出纳员的岗位职责
2014/02/22 职场文书
《陋室铭》教学反思
2014/02/26 职场文书
学雷锋标语
2014/06/25 职场文书
税务干部群众路线教育实践活动对照检查材料
2014/09/20 职场文书
预备党员转正思想汇报
2014/09/26 职场文书
2015年度高中教师工作总结
2015/05/26 职场文书