2013-10-11 10 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 Chrom, erhalte ich folgende Fehlermeldung:

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

Antwort

55

Die $scope ist nur für Controller und die Link-Funktion von Richtlinien. Deshalb kann der Filter sie nicht finden. Vielleicht meintest du $rootScope?

+0

Ja, $ rootScope ist verfügbar. – dylan

+13

** WARNUNG AN SUCHER: ** '$ rootScope' ist im Wesentlichen ein globaler Bereich. Achten Sie auf Implikationen dieser Tatsache; z.B. Uhren von einem inneren Controller auf dem $ rootScope müssen darauf achten, sich selbst abzumelden, oder Speicherlecks können auftreten. Also, nur weil das $ rootScope verfügbar ist, bedeutet das nicht, dass Sie es unvorsichtig benutzen. –

+0

Danke, immer noch eine nützliche Antwort mit Angular 1.6.3! – zaphodb

1

Ich habe festgestellt, dass "dies" auf den lokalen $ scope (innerhalb der Filterfunktion) verweist. Nicht sicher, ob dies ein sicherer Weg ist, um darauf zuzugreifen.

Verwandte Themen