如何从另一个函数访问全局函数(Vue.prototype.myFn)?

时间:2019-01-06 14:33:12

标签: javascript vue.js vuejs2 nuxt.js

我在nuxt.js项目上并尝试创建全局函数,但出现此错误:

Cannot read property '$toggleBodyClass' of undefined

这是我的代码(plugins / globals.js):

import Vue from 'vue';

Vue.prototype.$toggleBodyClass = (addRemoveClass, className) => {
  const elBody = document.body;

  if (addRemoveClass === 'addClass') {
    elBody.classList.add(className);
  } else {
    elBody.classList.remove(className);
  }
};

Vue.prototype.$setMmodalBackdrop = () => {
  this.$toggleBodyClass('addClass', 'modal-open'); // ** How to make this work? **
};

当我在我的组件(components / myComp.vue)中使用它时,这项工作就很好了:

<template>
  <div>
    <button @click="handelClick">Toggle Class</button>
  </div>
</template>

<script>
export default {
  methods: {
    handleClick() {
      this.$toggleBodyClass('addClass', 'modal-open');
    },
  },
};
</script>

请帮助,谢谢。

2 个答案:

答案 0 :(得分:1)

只需更改您的代码

CREATE VIEW C_View
    AS 
SELECT  C.Item, 
        C.Loc1, 
        COALESCE((SELECT SUM(Qty) FROM A WHERE A.Item = C.Item AND A.Loc = C.Loc1), 0) -
        COALESCE((SELECT SUM(Qty) FROM B WHERE B.Item = C.Item AND B.Loc = C.Loc1), 0) 
        AS Qty1,
        C.Loc2, 
        COALESCE((SELECT SUM(Qty) FROM A WHERE A.Item = C.Item AND A.Loc = C.Loc2), 0) -
        COALESCE((SELECT SUM(Qty) FROM B WHERE B.Item = C.Item AND B.Loc = C.Loc2), 0) 
        AS Qty2,
        ...
        C.Loc16, 
        COALESCE((SELECT SUM(Qty) FROM A WHERE A.Item = C.Item AND A.Loc = C.Loc16), 0) -
        COALESCE((SELECT SUM(Qty) FROM B WHERE B.Item = C.Item AND B.Loc = C.Loc16), 0) 
        AS Qty16,
FROM C;

this.$toggleBodyClass

答案 1 :(得分:1)

在nuxt中,您可以使用注入功能使它可以从上下文,vuex存储等inject中访问

export default ({ app }, inject) => {
  inject('myInjectedFunction', (string) => console.log('That was easy!', string))
}