在 .vue 文件之间共享一个 js-class

share a js-class between .vue files

回到我的时代,我们有一个叫做包含或导入或其他的疯狂的东西。这意味着您在一个文件中编写了一些代码,然后在不同的文件中重复使用它。因此,您将在文件 x 中创建一个 class,将此文件包含在另一个文件 y 中,并从中实例化一个对象。基本上这意味着,即使它写在文件 x 中,您也可以调用函数表单文件 y。

vue.js怎么能做到这样的事情呢?我知道做这件事的新方法叫做“组件 api”。在网上,我只找到了一些与 dom 耦合的非常复杂的例子,我不需要。

或者我应该使用 mixinsMixins 似乎至少在工作,但他们有范围问题。

这是我要分享的文件 (x.vue):

<script>
export default
{
    data ()
    {
        return {
            a: 'test'
        }
    }
    ,mounted ()
    {
        
    }
    ,methods:
    {
        test ()
        {
            console.log( "test : " + this.a );
        }
    }
}
</script>

y.vue:

  <script>
    import x from './x.vue'
    
    export default {
        
        name:"whatever"
        
        ,components:
        {
            x
        }
        ,mounted()
        {
            x.a = "it is working";
            x.test();
        }
    }
    </script>

网络浏览器告诉我 a 不是函数。有谁知道错误在哪里?还是我应该创建一个 js class 并尝试导入它?

感谢您的帮助。

我相信您正在寻找 mixin: https://vuejs.org/v2/guide/mixins.html

它们允许您从另一个文件共享函数、数据、挂钩和所有其他内容。

这将是您的情况的一种方法。

mixins.js:

export default {
    methods: {
        sayHello () {
            console.log( "test : " + this.a);
        }
    }
};

component.vue:

<script>
    import mixins from "@/path/to/mixins/mixins";

    export default {
      name: "whatever",
      mixins: [mixins],
      data ()
      {
          return {
              a: 'HELLO'
          }
      },
      created() {
        this.sayHello();
      }
    }
</script>

更多信息:Mixins


编辑:看起来有符合您需求的东西!

mixins.js:

export default {
    name: 'Mixin',
    methods: {
        sayHello() {
            console.log("Hello")
        }
    }
}

component.js:

export default {
    name: 'whatever',
    mixins: [Mixin],
    created() {
      this.$super(Mixin).sayHello();
    }
}

EDIT2:按照您的要求,传递参数的简单示例。

mixins.js:

export default {
    methods: {
        sayHello(foo, bar) {
            console.log(foo + bar)
        }
    }
}

component.js:

export default {
    name: 'whatever',
    mixins: [Mixin],
    data () {
        return {
            baz: 'Say'
        }
    },
    created() {
      this.sayHello(this.baz, " Hello");
    }
}

Mixin 在这种情况下没有用,因为 mixin 的实例不能超过一个。这就像将 mixin 中的代码复制并粘贴到另一个文件中。

Vue 组件之间共享代码可以由许多使用标准 js classes 的储户来完成。所需要的只是用 export default class.

声明 class