gpt4 book ai didi

javascript - 如何使自定义装饰器对 vue.js 2 应用程序全局可用?

转载 作者:行者123 更新时间:2023-11-29 10:56:48 24 4
gpt4 key购买 nike

我创建了一个 typescript 装饰器,它向传递的方法添加了一些额外的参数。它在没有使用可选参数的装饰器的情况下工作得很好。大多数时候不需要传递这些参数,但偶尔需要传递这些参数。

但是我看到其他开发人员不知道要传递的其他参数是什么,除非他们看到该方法的实现或 jsdoc,他们不应该关心这些。

所以我创建了一个装饰器,它将以正确的顺序和正确的状态添加参数。一切正常,但现在每个人都必须记住向 MyDecorator 添加额外的导入。所以我想让这个装饰器全局可用。

还在我们的应用程序中,我们使用装饰器来创建组件、 Prop 、 setter/getter 和 Action 。如果我也能使这些全局化,那就太好了。几乎我们所有的组件都使用这些组件,每次导入都只是样板文件。 (没有错,只是让我们所有人都更容易)

这是使用伪代码装饰器的应用组件语法示例。

<script lang="ts">
import { Vue, Component, Prop, Emit } from 'vue-property-decorator';
import { MyDecorator } from './src/utils';
import { Getter } from 'vuex-class';

@Component({})
export default class MyComponent extends Vue {
@Getter('something', { namespace: 'whatever' })
something: number;

mounted() {
@MyDecorator()
doSomething('do it please');
}
}
</script>

所有 vue 组件如何在不使用 import 的情况下获得可用的装饰器?可能吗?

最佳答案

在@LShapz 的评论后,我看到使用插件可以做到这一点。不过,我仍然需要导入 Vue。

import { Component } from 'vue-property-decorator';
import { MyDecorator } from '@/src/utils';

const MyPlugin: any = {};
MyPlugin.install = (Vue, options) => {

Vue.Awesome = Component; // this I will never use as it will require to edit all files in my project

Vue.MyDecorator = MyDecorator;
Vue.prototype.MyProtoDecorator = MyDecorator;
};
// the MyPlugin can be placed on another file and exported

Vue.use(MyPlugin);

使用它:

<script lang="ts">
import { Vue } from 'vue-property-decorator';
import { Getter } from 'vuex-class';

@Vue.Awesome({}) // this is to show it is possible. Not practical
export default class MyComponent extends Vue {
@Getter('something', { namespace: 'whatever' })
something: number;

mounted() {
@Vue.MyDecorator() // this is the thing that is practical for my case
doSomething('done it somehow');

@this.MyProtoDecorator() // second way
doSomething('done again');

}
}
</script>

关于javascript - 如何使自定义装饰器对 vue.js 2 应用程序全局可用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55594831/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com