angular-primus

Primus provider for Angular.

angular-primus

Primus provider for Angular.

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

bower install angular-primus
angular.module('controllers.primus', ['primus'])
.config(function (primusProvider) {
  primusProvider
  // Define Primus endpoint. 
  .setEndpoint('http://mywebsite.com')
  // Define Primus options. 
  .setOptions({
    reconnect: {
      minDelay: 100,
      maxDelay: 60000,
      retries: 100
    }
  })
  // Define default multiplex option for resources. 
  .setDefaultMultiplex(false);
})
.controller('PrimusCtrl', function ($scopeprimus) {
 
  // Listen "data" event. 
  primus.$on('data', function (data) {
    $scope.data = data;
  });
 
  // Write data. 
  primus.write('hello');
 
 
  // 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) {
    myResource.myMethod();
  });
});

$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.

MIT