I'm new to Angular and Deployd and wondering how to use them together.
I found the example in Deployd website nice, but it's only consuming rest API data and I'd like to understand how to have Deployd as a service inside AngularJS. For example, keeping all of the clients API up-to-date with the collection's latest data with collection events available in deployd.
I came up with the example below, where we can see that I'm using $resource to consume the rest api, but inside the controller "MyCtrl", I'm calling dpd, that I'd like to use to take advantage of features such as http://docs.deployd.com/docs/collections/notifying-clients.md
I'd really like to see some examples, or any advice concerning this!
Thanks for looking :)
angular.module('questions', ['ngResource'])
.factory('Deployd', function(dpd){
  return dpd;
})
.factory('EntriesService', function($resource){
  return $resource('/entries', {});
})
.controller('MainCtrl', ['$scope', 'EntriesService', function($scope, EntriesService) {
  $scope.title = "Q&A Module";
  $scope.entries = [];
  EntriesService.query(function(response){
    $scope.entries = response;       
  });
  $scope.addMessage = function() {
    $scope.entries.push({
        author: "myAuthor",
        message: $scope.message
    });
    EntriesService.save({
        author: "myAuthor",
        message: $scope.message
    });
  };
  dpd.comments.get(function(comments, error) {
    comments.forEach(function(comment) {
      console.log(comment);
    });
  });
}]);
                If you're using AngularJS 1.5+ with components and ES2015/ES6, you can inject an external library by using a constant.
For example, to inject d3.js into an AngularJS component:
First install d3 with npm install d3 --save, then import it into your app module and then inject it as a constant to your component.
in app.module:
import * as d3 from 'd3';
import { MyComponent } from './my-component/my-component';
export default angular.module('app', [])
    .constant('d3', d3)
    .component('myComponent', MyComponent)
    .name;
in my-component:
// Controller
class MyController {
    constructor(d3, $element) {
        this.d3 = d3;
        this.$element = $element;
    }
    $onInit() {
        // $element is the jqLite or jQuery component's element and 
        // $element[0] is the DOM node element
        this.d3.select(this.$element[0]).append('p').text('Hello world');
    }
}
// Component
export var MyComponent = {
    template: require('./my-component.html'),
    controller: MyController
};
                        I found a solution. This may be helpful in the future for someone else:
angular.module('questions', ['ngResource'])
.factory('Deployd', function(){
  return dpd;
})
.factory('EntriesService', function($resource){
  return $resource('/entries', {});
})
.controller('MainCtrl', ['$scope', 'EntriesService', 'Deployd', function($scope, EntriesService, Deployd) {
  $scope.title = "Q&A Module";
  $scope.entries = [];
  EntriesService.query(function(response){
    $scope.entries = response;        
  });
  $scope.addMessage = function() {
    var author = "myAuthor";
    var message = $scope.message;
    Deployd.entries.post({
      author: author,
      message: message
    }, function(comment, error) {
      if (error) {
        return showError(error);
      }
      $scope.entries.push({
        author: author,
        message: message
      });
    });
  };
  Deployd.entries.on('create', function() {
    EntriesService.query(function(response){
      $scope.entries = response;        
    });
  });
}]);
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With