2015-05-15 19 views
8

devo pulsante mi piace questoFare una funzione dinamica sul ng clic

<button ng-click="method = 'create'; title = 'Create'>create</button> 
<button ng-click="method = 'update'; title = 'Update'>update</button> 

e questo codice

<button ng-click="create(param)">{{ title }}</button> 
<button ng-click="update(param)">{{ title }}</button> 

sopra funziona bene, ma voglio renderlo dinamico.

quindi lo cambio come segue.

<button ng-click="{{ method }}(param)">{{ title }}</button> 

Questo non funziona, non so perché, anche se controllo l'elemento, il codice sopra genera il codice corretto come accennato in precedenza.

risposta

24

L'utilizzo di bracket notation:

<button ng-click="this[method](param)">{{ title }}</button> 

this punti di opporsi ambito corrente così con this[method] è possibile accedere tramite il metodo nome di variabile.

+1

Ho appena creato un Plnkr http://plnkr.co/edit/aWIS1oHja11hGm4pycMC?p=preview –

+0

grazie mille, amico^_^ –

2

questo non ha funzionato per me .. e ..

non volevo avere a che fare con il codice html nella mia app angolare, o direttive, o l'uso di eval. così ho avvolto le mie funzioni esistenti in una funzione:

$scope.get_results = function(){ 

    return { 
      message: "A message", 
      choice1: {message:"choice 1 message", f: function(){$scope.alreadyDefinedFunction1()}}, 
      choice2: {message:"choice 2 message", f: function(){$scope.alreadyDefinedFunction2()}}, 
     }; 
} 

in una funzione diversa:

$scope.results2 = $scope.get_results(); 

frammento di utilizzo in html:

<ul class="dropdown-menu scroll-div"> 
    <li><a ng-click="results2.choice1.f()">{{results_2_menu.choice1.message}}</a></li> 
    <li><a ng-click="results2.choice2.f()">{{results_2_menu.choice2.message}}</a></li> 
</ul> 

era basato su questo js violino: http://jsfiddle.net/cdaringe/FNky4/1/

+0

Questo ha funzionato per me! La risposta accettata tuttavia no. Grazie – JoeCodeCreations

0

Questa sintassi sembra funzionare correttamente

a partire dal suggerimento dell'utente dfsq e poiché il suggerimento non funzionava con angularjs 1.6.4, ho inserito il riquadro di chiusura dopo il valore del parametro.

Problemi correlati