如何在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动画效果代码
Jul 20 Javascript
分享XmlHttpRequest调用Webservice的一点心得
Jul 20 Javascript
javascript实现tabs选项卡切换效果(自写原生js)
Mar 19 Javascript
node.js中的fs.fchown方法使用说明
Dec 16 Javascript
jQuery实现TAB选项卡切换特效简单演示
Mar 04 Javascript
JavaScript实现弹出DIV层同时页面背景渐变成半透明效果
Mar 25 Javascript
Bootstrap基本插件学习笔记之折叠(22)
Dec 08 Javascript
laravel5.4+vue+element简单搭建的示例代码
Aug 29 Javascript
BootstrapTable加载按钮功能实例代码详解
Sep 22 Javascript
js实现黑白div块画空心的图形
Dec 13 Javascript
Vue实现类似Spring官网图片滑动效果方法
Mar 01 Javascript
jQuery 选择器用法实例分析【prev + next】
May 22 jQuery
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目录函数实现创建、读取目录教程实例
2011/01/13 PHP
使用Thinkphp框架开发移动端接口
2015/08/05 PHP
10个值得深思的PHP面试题
2016/11/14 PHP
Thinkphp结合ajaxFileUpload实现异步图片传输示例
2017/03/13 PHP
收藏一些不常用,但是有用的代码
2007/03/12 Javascript
js直接编辑当前cookie的脚本
2008/09/14 Javascript
JS打印gridview实现原理及代码
2013/02/05 Javascript
jCallout 轻松实现气泡提示功能
2013/09/22 Javascript
判断滚动条到底部的JS代码
2013/11/04 Javascript
ExtJS[Desktop]实现图标换行示例代码
2013/11/17 Javascript
NodeJS学习笔记之网络编程
2014/08/03 NodeJs
深入理解JavaScript系列(36):设计模式之中介者模式详解
2015/03/04 Javascript
原生js获取元素样式的简单方法
2016/08/06 Javascript
基于js的变量提升和函数提升(详解)
2017/09/17 Javascript
vue中简单弹框dialog的实现方法
2018/02/26 Javascript
Vue 中axios配置实例详解
2018/07/27 Javascript
jQuery操作元素追加内容示例
2020/01/10 jQuery
Vue移动端用淘宝弹性布局lib-flexible插件做适配的方法
2020/05/26 Javascript
Vue Router中应用中间件的方法
2020/08/06 Javascript
Python中__name__的使用实例
2015/04/14 Python
python之virtualenv的简单使用方法(必看篇)
2017/11/25 Python
python多线程同步之文件读写控制
2021/02/25 Python
对Pytorch中Tensor的各种池化操作解析
2020/01/03 Python
python 解决flask 图片在线浏览或者直接下载的问题
2020/01/09 Python
python为什么要安装到c盘
2020/07/20 Python
Ubuntu16安装Python3.9的实现步骤
2020/12/15 Python
阿玛尼意大利官网:Armani意大利
2018/10/30 全球购物
澳大利亚在线高跟鞋商店:Shoe Me
2019/11/19 全球购物
Michael Kors香港官网:美国奢侈品品牌
2019/12/26 全球购物
新奥尔良珠宝:Mignon Faget
2020/11/23 全球购物
MVC的各个部分都有那些技术来实现?如何实现?
2016/04/21 面试题
责任胜于能力演讲稿
2014/05/20 职场文书
上市公司董事长岗位职责
2015/04/16 职场文书
养成教育工作总结
2015/08/13 职场文书
小学班主任工作经验交流材料
2015/11/02 职场文书
Python代码风格与编程习惯重要吗?
2021/06/03 Python