无法通过插件访问 Vue.js 全局函数

Posted

技术标签:

【中文标题】无法通过插件访问 Vue.js 全局函数【英文标题】:Unable to access Vue.js global function through plugin 【发布时间】:2020-01-11 12:41:16 【问题描述】:

我正在尝试将一些常用功能重构为适用于我的应用的全局可用的 Util 插件。我按照docs 和this question 的说明进行操作,但我不确定如何使用模板中的函数,Vue 一直抱怨未定义的方法。理想情况下,我只想从任何子组件调用isEmpty

util.js

export default 
  install(Vue, options) 
      Vue.isEmpty = function (object) 
        return false // dummy function for now to check if method works
      
  

也试过了:

Util.install = function (Vue, options) 
  Vue.isEmpty = function () 
    ...
  
  // this doesn't work either
  // Vue.prototype.$isEmpty = function (object) 
  // return false
  //  

main.js

import util from './components/shared/util.js'
import comp from './components/shared/myComponent.js'
// Vue.component('util', util) this doesn't work
Vue.use(util)

const app = new Vue(
...
components: 
    comp
).$mount('#app')

以下都不起作用。抛出的错误是TypeError: Cannot read property 'isEmpty' of undefined

组件模板

<p v-if="util.isEmpty(license)" class="margin-0">N/A</p>
<p v-if="Vue.isEmpty(license)" class="margin-0">N/A</p>
<p v-if="isEmpty(license)" class="margin-0">N/A</p>

【问题讨论】:

【参考方案1】:

您几乎完成了,缺少prototype。试试这个:

utils.js

export default 
  install(Vue, options) 
      Vue.prototype.isEmpty = function (object) 
        return false // dummy function for now to check if method works
      
  

组件

<p v-if="isEmpty(license)" class="margin-0">N/A</p>

这里是一个例子:https://codesandbox.io/s/vue-template-tdx00

【讨论】:

以上是关于无法通过插件访问 Vue.js 全局函数的主要内容,如果未能解决你的问题,请参考以下文章

vue.js jquery - 从 jQuery 方法访问全局函数

如何调用我的 Vue.js 插件中声明的函数

vue全局API

Vue.js 插件

Vue.js 3:无法导入 Vue 全局对象

Vue.js,使用插件方法