如何在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 相关文章推荐
mapper--图片热点区域高亮组件官方站点
Dec 22 Javascript
javascript 多级checkbox选择效果
Aug 20 Javascript
jquery1.4.2 for Visual studio 2010 模板文件
Jul 14 Javascript
DOM_window对象属性之--clipboardData对象操作代码
Feb 03 Javascript
jQuery中jqGrid分页实现代码
Nov 04 Javascript
js导入导出excel(实例代码)
Nov 25 Javascript
JS小游戏之仙剑翻牌源码详解
Sep 25 Javascript
javaScript的函数对象的声明详解
Feb 06 Javascript
JS实现动态移动层及拖动浮层关闭的方法
Apr 30 Javascript
JavaScript判断手机号运营商是移动、联通、电信还是其他(代码简单)
Sep 25 Javascript
vue中将网页打印成pdf实例代码
Jun 15 Javascript
基于JS对象创建常用方式及原理分析
Jun 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
Laravel中使用阿里云OSS Composer包分享
2015/02/10 PHP
php fread函数使用方法总结
2019/05/28 PHP
用Move.js配合创建CSS3动画的入门指引
2015/07/22 Javascript
JavaScript判断表单中多选框checkbox选中个数的方法
2015/08/17 Javascript
解析利用javascript如何判断一个数为素数
2016/12/08 Javascript
Bootstrap table使用方法总结
2017/05/10 Javascript
vue2.0+ 从插件开发到npm发布的示例代码
2018/04/28 Javascript
JS实现HTML页面中动态显示当前时间完整示例
2018/07/30 Javascript
vue2.0获取鼠标位置的方法
2018/09/13 Javascript
JS如何获取地址栏的参数实例讲解
2018/10/06 Javascript
jquery实现Ajax请求的几种常见方式总结
2019/05/28 jQuery
vue Tab切换以及缓存页面处理的几种方式
2019/11/05 Javascript
JS面向对象实现飞机大战
2020/08/26 Javascript
vue 公共列表选择组件,引用Vant-UI的样式方式
2020/11/02 Javascript
原生JavaScript实现贪吃蛇游戏
2020/11/04 Javascript
JS使用setInterval计时器实现挑战10秒
2020/11/08 Javascript
[36:14]DOTA2上海特级锦标赛D组小组赛#1 EG VS COL第二局
2016/02/28 DOTA
python获取外网ip地址的方法总结
2015/07/02 Python
PyQt5笔记之弹出窗口大全
2019/06/20 Python
在django模板中实现超链接配置
2019/08/21 Python
python爬虫 线程池创建并获取文件代码实例
2019/09/28 Python
Python如何计算语句执行时间
2019/11/22 Python
Django关于admin的使用技巧和知识点
2020/02/10 Python
python logging通过json文件配置的步骤
2020/04/27 Python
pytorch简介
2020/11/11 Python
瑞典时尚耳机品牌:Urbanears
2017/07/26 全球购物
Whistles官网:英国女装品牌
2020/08/14 全球购物
沃尔玛旗下墨西哥超市:Bodega Aurrera
2020/11/13 全球购物
如果NULL和0作为空指针常数是等价的,那我到底该用哪一个
2014/09/16 面试题
EJB发布WEB服务一般步骤
2012/10/31 面试题
办公室文秘岗位职责
2013/11/15 职场文书
如何写一封打动人心的求职信
2014/02/17 职场文书
《孔子拜师》教学反思
2014/02/24 职场文书
个人综合鉴定材料
2014/05/23 职场文书
PHP实现创建以太坊钱包转账等功能
2021/04/21 PHP
JDK8中String的intern()方法实例详细解读
2022/09/23 Java/Android