如何用导入的方法装饰 typescript vue 类组件?

Posted

技术标签:

【中文标题】如何用导入的方法装饰 typescript vue 类组件?【英文标题】:How to decorate typescript vue class component with an imported method? 【发布时间】:2019-09-04 20:53:44 【问题描述】:

我最近开始使用带有 typescript 的 vue 类组件,但找不到用导入的实用程序方法装饰组件类的方法。我正在使用nuxt-property-decorator 来装饰我的组件。

我已经尝试添加方法,就像我在没有打字稿的 vue 组件中那样:

import doSomething from './somewhere';

<script>
    export default 
        methods: 
            doSomething,// I'd do this without typescript, works as expected
        ,
    
</script>

<script lang="ts">
    import Vue from 'vue';
    import Component from 'nuxt-property-decorator';
    import doSomething from './somewhere';

    @Component
    export default class MyCustomClass extends Vue 
        doSomething, // Doesn't, "Property or method doSomething is not defined on the instance but referenced during render..."

        hacky() 
            return doSomething(); // I guess I could do it this way, but this looks like a very hacky way
        
    
</script>

【问题讨论】:

【参考方案1】:

你所要做的就是:

doSomething = doSomething

所有其他方法都在哪里。

【讨论】:

【参考方案2】:

解决这个问题的方法是简单地使用@Component 来装饰组件:

<script lang="ts">
    @Component(
        methods: 
            preventContextMenu,
        ,
    )
    export default class MyCustomClass extends Vue 
        ...
    
</script>

【讨论】:

【参考方案3】:

在我使用vue-property-decorator 之前。据我所知,nuxt-property decorator 就是基于它。

不确定这是否是您要查找的内容,但如果您想在组件初始化上运行某些东西,您可以在组件内使用mounted。这是生命周期钩子

例子:

        import doSomething from './somewhere';

        <script>
            export default 
                methods: 
                    doSomething,// I'd do this without typescript, works as expected
                ,
            
        </script>

        <script lang="ts">
            import Vue from 'vue';
            import Component from 'nuxt-property-decorator';
            import doSomething from './somewhere';

            @Component
            export default class MyCustomClass extends Vue 

                public mounted()
                  doSomething...
                  // everything in this method  will be triggered on component load
                
            
        </script>

【讨论】:

你是对的——nuxt-property-decorator 基于vue-property-decorator,但你没有正确理解我的问题。我不想使用组件生命周期挂钩,我想在我的组件中使用导入的方法 - doSomething 是我从某些 es6 模块导入的方法,我的问题是我找不到使用它的方法导入的方法,对不起我的英语能力差。

以上是关于如何用导入的方法装饰 typescript vue 类组件?的主要内容,如果未能解决你的问题,请参考以下文章

Vue + Typescript - 使用基于类的装饰器导入错误

使用Typescript和类组件装饰器时如何将数组传递给Vue中的props

TypeScript、Vue 和实验性装饰器

使用带有 Vue 和 TypeScript 类装饰器语法的外部定义组件

如何用异步任务装饰午睡请求

基于rollup + typescript开发vue组件,可使用ts装饰器