2013-10-11 14 views
18
marsApp.filter("transformSensorStatus", function($scope) { 
    return function(input, options) { 

    var sensorReading = (input ? (input/1000) : 0); 
    var sensorLowLimit = (options["lowLimit"] ? (options["lowLimit"]/1000) : 0); 
    var sensorHighLimit = (options["highLimit"] ? (options["highLimit"]/1000) : 0); 
    var curStat; 
    switch (sensorReading) { 
     case 255: 
     case 254: 
     case 253: 
      curStat = generateStateInnerHtml(sensorReading); 
      break; 
     default: 
      curStat = generateStateInnerHtml(options["sensorStatus"]); 

    } 

    return curStat; 


    function generateStateInnerHtml(state) { 

     var stateHtml = null; 

     if (state == 255 || state == 254) { 
      stateHtml = "a"; 
      $scope.sensorStateColor=''; 
      return state_html; 
     } 
     if (state == 253) { 
      stateHtml = "b"; 
      $scope.sensorStateColor="text-warning"; 
      return state_html; 
     } 
     if (state >= 0x20) { 
      stateHtml = "c"; 
      $scope.sensorStateColor="text-error"; 
      return stateHtml; 
     } 
     if (state >= 0x02) { 
      stateHtml = "d"; 
      $scope.sensorStateColor="text-error"; 
      return stateHtml; 
     } 
     if (state == 0x01) { 
      stateHtml = "e"; 
      $scope.sensorStateColor="text-success"; 
      return stateHtml; 
     } 
     stateHtml = "N/A"; 
     return stateHtml; 
    } 
} 

});

in cromo, ottengo il seguente errore:

Error: Unknown provider: $scopeProvider <- $scope <- transformSensorStatusFilter

risposta

55

Il $scope è disponibile solo per i controller e la funzione di collegamento delle direttive. Questo è il motivo per cui il filtro non riesce a trovarlo. Forse intendevi $rootScope?

+0

sì, $ rootScope è disponibile. – dylan

+13

** AVVISO AI VISUALIZZATORI: ** '$ rootScope' è essenzialmente un ambito globale. Fai attenzione alle implicazioni di questo fatto; per esempio. gli orologi da un controller interno sul '$ rootScope' devono occuparsi di cancellarsi da soli o possono verificarsi perdite di memoria. Quindi, solo perché '$ rootScope' è disponibile, non significa andare avanti e usarlo con noncuranza. –

+0

Grazie, ancora una risposta utile con Angular 1.6.3! – zaphodb

1

Ho trovato che "questo" fa riferimento a $ scope locale (all'interno della funzione filtro). Non sono sicuro se questo è un modo sicuro di accedervi.

Problemi correlati