node package manager
Love JavaScript? Your insights can make it even better. Take the 2017 JavaScript Ecosystem Survey »


angular-primus Build Status

Primus provider for Angular.

This plugin works with other Primus plugins like primus-emitter and primus-resource.


Using bower

bower install angular-primus


angular.module('controllers.primus', ['primus'])
.config(function (primusProvider) {
  // Define Primus endpoint. 
  // Define Primus options. 
    reconnect: {
      minDelay: 100,
      maxDelay: 60000,
      retries: 100
  // Define default multiplex option for resources. 
.controller('PrimusCtrl', function ($scope, primus) {
  // Listen "data" event. 
  primus.$on('data', function (data) {
    $ = data;
  // Write data. 
  // Listen custom event using primus-emitter. 
  primus.$on('customEvent', function (customData) {
    $scope.customData = customData;
  // Listen custom event with a filter (more details below) 
  // ex. server broadcasting a user account update : 
  primus.$on('account:update', {userId: 23}, function (account) {
    _.merge($scope.account, account);
  // Send data using primus-emitter. 
  primus.send('customEvent', { foo: 'bar' });
  // Use resource with primus-resource. 
  primus.$resource('myResource').then(function (myResource) {

about $on and $filteredOn

$filteredOn takes as filter either :

  • an object, whom keys will be deep-matched for correspondance with the 1st param of received data, using lodash matches(...). Example of a deep matching :

    primus.$on('node:update', {content: {id: 23, type: 'image'}}, …)
  • a function, taking the received data as arguments and returning true/false = match/don't match

Both $on and $filteredOn will call the listener in Angular context, in an optimized way via $evalAsync. So if you have several listeners on the same event, they will all get executed in the same $digest phase.

$filteredOn will not trigger any apply if the received data doesn't match the given filter. This is desirable if your Angular app is heavy.