because shithub doesnt have ipv6 support
Find a file
David Vezzani e84ac8ce71 corrects published documentation
Yes, the code actually needs to be fixed, but in the mean time, for
those new to this project, this correction will get you running.

See https://github.com/MetinSeylan/Vue-Socket.io/issues/85#issuecomment-328351693
2018-01-15 08:49:31 -07:00
dist 2.1.1-b build 2018-01-15 14:51:11 +03:00
src fix(observer): lowercased event name before translation 2017-11-20 14:12:00 +02:00
.gitignore 2.1.1-b build 2018-01-15 14:51:11 +03:00
package.json 2.1.1-b build 2018-01-15 14:51:11 +03:00
README.md corrects published documentation 2018-01-15 08:49:31 -07:00
webpack.config.js 2.1.0 2016-12-31 01:18:10 +03:00

Vue-Socket.io

NPM version VueJS v2 compatible Downloads Dependency Badge License

socket.io implementation for Vuejs 2 and Vuex

Install

npm install vue-socket.io --save

Usage

Configuration

Automatic socket connection from an URL string

import VueSocketio from 'vue-socket.io';
Vue.use(VueSocketio, 'http://socketserver.com:1923');

Bind custom socket.io-client instance

Vue.use(VueSocketio, socketio('http://socketserver.com:1923'));

Enable Vuex integration

import store from './yourstore'
Vue.use(VueSocketio, socketio('http://socketserver.com:1923'), store);

On Vuejs instance usage

import Vue from 'vue'

var vm = new Vue({
  sockets:{
    connect: function(){
      console.log('socket connected')
    },
    customEmit: function(val){
      console.log('this method was fired by the socket server. eg: io.emit("customEmit", data)')
    }
  },
  methods: {
    clickButton: function(val){
        // $socket is socket.io-client instance
        (new Vue()).$socket.emit('emit_method', val);
    }
  }
})

Dynamic socket event listeners

Create a new listener

this.$options.sockets.event_name = (data) => {
    console.log(data)
}

Remove existing listener

delete this.$options.sockets.event_name;

Vuex Store integration

Socket mutations always have SOCKET_ prefix.

Socket actions always have socket_ prefix and the socket event name is camelCased (ex. SOCKET_USER_MESSAGE => socket_userMessage)

You can use either one or another or both in your store. Namespaced modules are supported.

import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex);

export default new Vuex.Store({
    state: {
        connect: false,
        message: null
    },
    mutations:{
        SOCKET_CONNECT: (state,  status ) => {
            state.connect = true;
        },
        SOCKET_USER_MESSAGE: (state,  message) => {
            state.message = message;
        }
    },
    actions: {
        otherAction: (context, type) => {
            return true;
        },
        socket_userMessage: (context, message) => {
            context.dispatch('newMessage', message);
            context.commit('NEW_MESSAGE_RECEIVED', message);
            if (message.is_important) {
                context.dispatch('alertImportantMessage', message);
            }
            ...
        }
    }
})

Example

Realtime Car Tracker System

Simple Chat App