2013-06-14 16 views
5

Devo modificare una variabile $scope all'interno di un filtro. La variabile $scope viene utilizzata per un attributo ng-show e le informazioni vengono aggiunte solo nel filtro perché ho un ng-repeat con alcune informazioni e applicato da alcuni filtri e devo sapere quando i filtri eliminano tutti i miei risultati per mostrare un messaggio ... ecco un esempio: (questa è solo un'idea)

.controller("thing", function() { 
    $scope.showText = false; 
}) 

.filter("filterText", function() { 
    return function(information) { 
    if (information == "") { /* NEED TO CHANGE $scope.showText to true */ } 
    } 
}) 

HTML:

<div ng-view="showText"> Some Text here </div> 
<div ng-repeat="info in information | filterText"></div> 

Grazie.

+9

Pensi che un filtro debba accedere a un controller e modificare le informazioni? Perché dovrebbe? Non è un trigger di azione del controller se lo showText dovrebbe cambiare? –

+0

Stai andando nella direzione sbagliata. Sono d'accordo con @PetarMinchev, i filtri non dovrebbero essere interessati o avere accesso a controllori o ambiti. Per definizione, i filtri riguardano solo i dati di input passati potrebbero essere ridotti e niente di più. Con le informazioni limitate fornite su ciò che stai cercando di ottenere, da una prospettiva di alto livello, dovresti utilizzare un legame unidirezionale per monitorare se l'informazione | filterText' è di lunghezza zero. I filtri – tamakisquare

+1

non devono mai alterare i dati che vengono forniti, poiché ciò potrebbe causare più cicli '$ digest' e rallentare le prestazioni. Metti tutto ciò che ti serve in un controller. – g00fy

risposta

4

Sono d'accordo con i commenti che probabilmente non si desidera modificare i dati nel filtro in primo luogo, ma se si è davvero molto difficile si potrebbe ottenere questo semplicemente definendo una funzione di filtro all'interno del controller (piuttosto che un effettivo "filtro" angolare) e quindi usarlo come tale:

ng-repeat="item in items | filter:myFilter()" 

$scope.myFilter = function(item) { 
    // access to scope here 
} 
Problemi correlati