【发布时间】:2021-05-26 07:05:29
【问题描述】:
我已经创建了一些 Vue 中间件,我正在尝试向 Vue 中的一个组件添加自定义属性,如下所示:
middleware.js:
import { VueConstructor } from 'vue/types';
function eventPlugin(vue: VueConstructor): void {
const Socket = new someClass();
Object.defineProperties(vue.prototype, {
$socket: {
get: function get() {
return Socket;
},
},
});
vue.$socket = Socket;
}
myComponent.js
const MyComponent = Vue.extend({
name: 'MyComponent',
$socket: {
event(data: any) {
}
},
methods: {
MyMethod() {
}
}
})
app.js
import Vue from 'vue';
import eventPlugin from './middleware.js';
import MyComponent from './myComponent.js'
Vue.use(eventPlugin);
export default new Vue({
render: (h) => h(MyComponent),
}).$mount('#app');
我想在这里添加的自定义属性显然是socket。问题是当我添加它时,我得到打字稿错误:
对象字面量只能指定已知属性,而 'socket' 可以 'ComponentOptions
>,记录<...>>'。
正如您在middleware.js 中看到的那样,我尝试在那里定义属性,所以我不确定为什么会收到错误消息?
【问题讨论】:
-
您显示的代码创建
$socket,而不是sockets。 -
向原型添加属性不会将其添加到组件选项中。它只是让你从组件上下文中访问属性(例如,
this.$socket在方法或钩子中)。 -
哦,好吧,有没有办法做到这一点?
标签: javascript typescript vue.js vuejs2