Vue3下使用TS开发Signalr插件
0 条评论插件 signalr.ts 文件
import { provide } from 'vue'
import * as signalR from "@microsoft/signalr";
export default {
install: (app, options) => {
console.log("安装执行Signalr")
let connection:signalR.HubConnection|null ;
let SignalrLogin= (token: string ):void => {
debugger;
connection = new signalR.HubConnectionBuilder()
.withUrl("/messagehub", {
accessTokenFactory: () =>
token,
})
.build();
connection.start().then(() => {
//connection.invoke("StudentApproval", "hello");
console.log("上线成功");
});
connection.on("Test", (data) => {
console.log("消息测试", data);
});
};
let GetSignalrConnection=():signalR.HubConnection|null=>{
return connection;
}
app.config.globalProperties.$SignalrLogin=SignalrLogin;
app.config.globalProperties.$GetSignalrConnection=GetSignalrConnection;
app.provide('$SignalrLogin', SignalrLogin)
app.provide('$GetSignalrConnection', GetSignalrConnection)
}
}
main.ts 注册全局
import signalrPlugin from "./plugins/signalr";
import * as signalR from "@microsoft/signalr";
declare module '@vue/runtime-core' {
export interface ComponentCustomProperties {
$SignalrLogin: (str: string | null) => void,
$GetSignalrConnection: () => signalR.HubConnection|null
}
}
app.use(signalrPlugin,{})
页面使用
<script setup lang="ts">
import {
ref,
reactive,
computed,
watch,
onMounted,
getCurrentInstance,
inject,
} from "vue";
const signalrLogin: (str: string | null) => void = inject("$SignalrLogin");
const conn: () => signalR.HubConnection | null = inject(
"$GetSignalrConnection"
);
//事件中调用
async function loginevent() {
signalrLogin(token.data.AccessToken);
}
conn();
</script>