2013-05-14 27 views
29

In controller ho seguito:Come chiamare i metodi factory da HTML in angularjs? metodi

var isPaused = false; 

$scope.switcher = function (booleanExpr, trueValue, falseValue) { 
    return booleanExpr ? trueValue : falseValue; 
}; 

$scope.isPaused = function() { 
    return isPaused; 
}; 

E posso chiamare da HTML come:

<body ng-controller="Cntrl"> 

... 
<h4> 
{{ switcher(isPaused(), 'Search Address Mode', 'Search Location Mode')}} 
</h4> 
<div class="btn-group"> 
    ...  
</div> 

Come vedete se isPaused() rendimenti false ottengo <h4>Search Location Mode</h4>

Questo è programma di utilità di conseguenza Voglio definirlo come factory

feederliteModule.factory('switcher', function() { 
return { 
    sw: function (booleanExpr, trueValue, falseValue) { 
     return booleanExpr ? trueValue : falseValue; 
    } 
    }; 
}); 

Nessuna eccezione, ma

quando provo a chiamare le cose come:

<h4> 
{{ switcher.sw(isPaused(), 'Search Address Mode', 'Search Location Mode')}} 
</h4> 
<div class="btn-group"> 
    ...  
</div> 

Non succede nulla.

** Ho aggiunto 'switcher' al controller.

Come posso chiamare il metodo factory da HTML?

(* vi danno il benvenuto a cambiare/modificare la mia domanda se non sembra chiaro)

Grazie,

+0

come sei riuscito a realizzare questo? Ho un problema simile ... potrebbe essere che non dovrei fare tutto questo come quello – trainoasis

+0

@ user1524316 beh, vedi risposta sotto –

+0

Ho pensato che non risolvesse la tua domanda interamente dal suo non accettato? – trainoasis

risposta

52

Beh, non dovresti davvero di farlo ... ma quello che si può do è mettere il tuo oggetto di servizio in una proprietà su $ scope e chiamarlo da lì.

app.controller('MyCtrl', function($scope, switcher) { 
    $scope.switcher = switcher; 
}); 
+3

Perché non dovrebbe? è disordinato? La tua soluzione funziona. La domanda è perché ho bisogno di creare '$ scope.switcher' se' controller' riceve l'identificatore 'switcher'.Grazie –

+7

Le viste HTML possono essere collegate al Controller (utilizzando la variabile $ scope) o estese con le Direttive. Qualsiasi altro modo non è un modo angolare :) – Chandermani

+0

@Chandermani Io uso questo metodo in diversi controller e il modo facile/breve è quello di creare fabbrica o servizio. –

3

avevo una domanda più generale, "Come chiamare angularjs portata/factory/servizio da html al caricamento della pagina." La mia soluzione era di chiamare il metodo all'interno di ng-show.

  1. Al massimo elemento che circonda il contesto in questione,
  2. Chiamare il metodo che utilizza la direttiva ng-show.
  3. Il metodo verrà eseguito prima di visualizzare la pagina.
  4. Nota è anche possibile utilizzare una soluzione come questo per fare in modo che il lavoro bootstrap è finito prima di visualizzare una pagina (questo può ridurre il numero di parti in movimento in un rendering sparso)

<div ng-show="runThisMethod(someVarOnScope)" .....>

Problemi correlati