javascript - Angular.js Service Factory module...return inner code as a function? -


i new angular.js. first service wrote. takes json object , updates scope of controller. i'm little confused on though...i think supposed wrap inner code of sselistener , return function, not sure how write , why need return function.

also, if inject service several controllers, multiply event listeners? want have 1 event listener.

one@demo ~/cloudimageshare-monitoring/project/app/scripts $ cat services/sse_listen.js  angular.module('monitorapp') .factory('sselistener', function () {     var source = new eventsource('/subscribe');      source.addeventlistener('message', function(e) {         var result = json.parse(e.data);          event = object.keys(result)[0];          switch(event) {              case "cpuresult":                  cpuupdate(result);              break;          }     }); } 

one@demo ~/cloudimageshare-monitoring/project/app/scripts $ cat controllers/main.js  'use strict';  angular.module('monitorapp') .controller('homectrl', function($scope, $location, $document) {     console.log("s"); });  angular.module('monitorapp') .controller('cpuctrl', function($scope) {     $scope.apitimestamp = "";     $scope.inforeceived = "";     $scope.last15 = "";     $scope.last5 = "";     $scope.lastminute = "";      var cpuupdate = function (result) {         $scope.$apply(function () {             $scope.apitimestamp = result.cpuresult.timestamp;             $scope.inforeceived = new date();             $scope.last15 = result.cpuresult.metrics['1m'].data             $scope.last5 = result.cpuresult.metrics['5m'].data             $scope.lastminute = result.cpuresult.metrics['15'].data         });     }  }); 

instead of calling cpuupdate directly (it's not clear me how factory gets reference function), better use $rootscope.$broadcast(eventname, data), , react event in controller. also, should return object factories, since don't need inject anywhere, it's best put in app.run. here's how think code should changes mentioned:

angular.module('monitorapp').     run(function ($rootscope) { //inject $rootscope         var source = new eventsource('/subscribe');          source.addeventlistener('message', function(e) {             var result = json.parse(e.data);              event = object.keys(result)[0];              switch(event) {                  case "cpuresult":                      // broadcast event data                      $rootscope.$broadcast('$cpuresult', result);                  break;              }         });     }).     controller('cpuctrl', function($scope)){         $scope.apitimestamp = "";         $scope.inforeceived = "";         $scope.last15 = "";         $scope.last5 = "";         $scope.lastminute = "";          // need pass event cpuupdate,         var cpuupdate = function (e, result) {              $scope.$apply(function(){                 $scope.apitimestamp = result.cpuresult.timestamp;                 $scope.inforeceived = new date();                 $scope.last15 = result.cpuresult.metrics['1m'].data                 $scope.last5 = result.cpuresult.metrics['5m'].data                 $scope.lastminute = result.cpuresult.metrics['15'].data             });         };          //listen event, call cpuupdate when caught         $scope.$on('$cpuresult', cpuupdate);     }); 

Comments

Popular posts from this blog

javascript - RequestAnimationFrame not working when exiting fullscreen switching space on Safari -

jsf - How to ajax update an item in the footer of a PrimeFaces dataTable? -

django - CSRF verification failed. Request aborted. CSRF cookie not set -