2015-05-15 25 views
8

Ich habe Taste wie dieseMachen Sie eine dynamische Funktion auf ng Sie auf

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

und diese

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

-Code oben funktioniert gut, aber ich möchte es dynamisch machen.

so ändere ich es wie folgt.

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

Das funktioniert nicht, ich weiß nicht warum, obwohl, wenn ich inspect Element, generiert Code oben korrigiert Code wie zuvor erwähnt.

Antwort

24

Verwendung von bracket notation:

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

this Punkte zu aktuellen Scope-Objekt so mit this[method] Sie Methode über Variablennamen zugreifen können.

+1

Erstellt gerade ein Plnrr http://plnkr.co/edit/aWIS1oHja11hGm4pycMC?p=preview –

+0

thx sehr, Kumpel^_^ –

2

Das hat bei mir nicht funktioniert .. und ..

Ich wollte nicht mit, die HTML-Code in meinem Winkel App oder Richtlinien oder die Verwendung von eval beschäftigen. so wickelte ich meine vorhandenen Funktionen nur in einer Funktion:

$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 einer anderen Funktion:

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

Snippet Verwendung 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> 

auf Grundlage war js Geige: http://jsfiddle.net/cdaringe/FNky4/1/

+0

Dies funktionierte für mich! Die angenommene Antwort hat jedoch nicht. Vielen Dank – JoeCodeCreations

0

Diese Syntax scheint gut zu funktionieren

beginnend mit dem Vorschlag des Benutzers dfsq und da der Vorschlag nicht mit angularjs 1.6.4 arbeitete, legte ich die schließende Stütze nach dem Param-Wert.

Verwandte Themen