2014-07-22 12 views
5

per la direttiva che ho scritto, come posso ottenere $ scope in modo che possa fare $ scope. $ On()? Potrei iniettare $ rootScope, ma voglio usare $ scope per catturare la trasmissione.

angular.module('monitorApp') 
.run(function($rootScope, $interval) { 
      $interval(function(){ 
       $rootScope.$broadcast('ONE_SEC'); 
      }, 1000); 
}); 

angular.module('monitorApp') 
.directive("countDown", [ 'sseHandler', function (sseHandler) { 
    console.log(sseHandler.broadcastStamp.cpuResult); 
    return { 
     scope: { 
      countFrom: "=" 
     }, 
     link: function(scope, $scope){ 
      scope.countFrom = sseHandler.broadcastStamp.cpuResult; 
      $scope.$on('ONE_SEC', function(scope) { 
       sseHandler.broadcastStamp.cpuResult--; 
      }); 
     } 
    } 
}]); 

UPDATE: con l'iniezione campo di applicazione, ottengo l'errore: Error: [$injector:unpr] Unknown provider: $scopeProvider <- $scope <- countDownDirective

angular.module('monitorApp') 
.directive("countDown", [ 'sseHandler', '$scope', function (sseHandler, $scope) { 
    console.log(sseHandler.broadcastStamp.cpuResult); 
    return { 
     scope: { 
      countFrom: "=" 
     }, 
     link: function(scope, $scope){ 
      scope.countFrom = sseHandler.broadcastStamp.cpuResult; 
      $scope.$on('ONE_SEC', function(scope, $scope) { 
       sseHandler.broadcastStamp.cpuResult--; 
      }); 
     } 
    } 
}]); 
+0

Ho provato scope.on() ma .on() non esiste su quell'ambito. – dman

+1

Non c'è "on", solo "$ on". I primi tre argomenti di 'link' sono sempre scope, elementi e attributi; puoi chiamarli in modo diverso, ma ottieni sempre le stesse cose. E non usare mai 'scope' e' $ scope', è solo un non-sense confuso. – maaartinus

+0

L'ho pensato anche io ... ma come faccio a ottenere ciò che sto cercando di fare nella direttiva senza usare 'scope' e' $ scope'? – dman

risposta

5

si può semplicemente utilizzare scope.$on, non è necessario necessario cercare di iniettare $scope:

scope.$on('ONE_SEC', function() { 
      //do stuff 
}); 

Esempio: http://jsfiddle.net/G2r7G/

0

Il legame dà argomenti campo di applicazione, degli elementi e attributi in questo ordine. Nel tuo link in realtà si sta assegnando element a $scope

Per iniettare il $ ambito si inietta nello stesso luogo che stai iniettando ssehandler

directive("countDown", [ 'sseHandler', '$scope', function (sseHandler, $scope)....

+0

'Errore: [$ injector: unpr] Fornitore sconosciuto: $ scopeProvider <- $ scope <- countDownDirective' con usando' .directive ("countDown", ['sseHandler', '$ scope', function (sseHandler, $ scope) {} ' – dman

+1

Metti $ scope nella tua funzione di esecuzione anche – Darren

+1

la tua funzione di link è ancora sbagliata - $ scope viene assegnato all'elemento in quello .. – Darren

Problemi correlati