vue 全局注冊signalr


vue 全局注冊signalr

1、安裝signalr

yarn add @aspnet/signalr
或
npm i --save @aspnet/signalr

2、新增signalrVue.js

const vueSignalr = {
  vm: {},
  // eslint-disable-next-line no-unused-vars
  install(Vue, instance) {
    if (this.installed) {
      return;
    }
    this.installed = true;

    if (!instance) {
      // eslint-disable-next-line no-console
      console.error('You have to install signalr');
      return;
    }

    Vue.signalr = instance;

    Object.defineProperties(Vue.prototype, {
      signalr: {
        get: function get() {
          return instance;
        },
      },
      $http: {
        get: function get() {
          return instance;
        },
      },
    });
  },
};

export { vueSignalr };

3、新增signalr.js

import * as signalR from '@aspnet/signalr';
import config from '@/config';
import { vueSignalr } from './signalrVue';
import Vue from 'vue';
let vm = new Vue({});
const connection =new  signalR.HubConnectionBuilder()
  .withUrl(config.signalR.url)
  //.withAutomaticReconnect([0, 0, 10000])
  //.configureLogging(signalR.LogLevel.Information)
  .build();
// 監聽關閉異常
connection.onclose(err => {
  console.assert(connection.state === signalR.HubConnectionState.Disconnected);
  vm.$message.error(err);
});
const start = function() {
  if (connection.state != signalR.HubConnectionState.Connected) {
    connection
      .start()
      .then(() => {
        // 服務連接成功,自動注冊一下
        register;
      })
      .catch(err => {
        vm.$message.error(err);
      });
  }
};
const register = function() {
  connection
    .invoke('Register', 'default')
    .then()
    .catch(err => {
      vm.$message.error(err);
    });
};
start();
// 添加插件
const installer={
    vm:{},
    install(Vue){
       Vue.use(vueSignalr, connection);
    }
}
export { installer as VueSignalr, connection as signalr };

4、main.js 文件中引入

import { VueAxios } from './utils/axios';
Vue.use(VueAxios);

// 其他模塊使用
function(){
	this.signalr.on("Method",function(){
	// receive message
   })
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM