2013-05-25 11 views
6

Ich bin neu in AngularJS, und ich habe eine NG-Klick auf eine Optionsschaltfläche von ng-repeat, und das Click-Ereignis abzünden ausgelöst. Wenn ich einen einfachen Onclick benutze, funktioniert das aber.ng-click feuert nicht Javascript globale Funktion

Dies funktioniert, und ich sehe die Warnung:

<div class="span2 left-justify" 
     ng-repeat="choice in physicalmode_choices"> 
    <input type="radio" 
      name="physical_layer" 
      value="{{ choice.private }}" 
      onclick="alert('foo')" 
      required 
      ng-model="$parent.networkoptions.physicalmode" /> 
      &nbsp;<span ng-bind="choice.public"></span> 
</div> 

Aber dies nicht:

<div class="span2 left-justify" 
     ng-repeat="choice in physicalmode_choices"> 
    <input type="radio" 
      name="physical_layer" 
      value="{{ choice.private }}" 
      ng-click="alert('foo')" 
      required 
      ng-model="$parent.networkoptions.physicalmode" /> 
      &nbsp;<span ng-bind="choice.public"></span> 
</div> 

Kann ich das nicht mit einem ng Sie auf? Oder missverstehe ich, was ein "Ausdruck" ist?

Danke, Mike

+0

Betrachten Sie den Titel dieser Frage zu ändern, es spielt beschreibt nicht das Problem und seine Antwort. Dasselbe Problem würde bei jeder Richtlinie oder Struktur auftreten, nicht nur bei dieser. Vielleicht erkennt etwas wie * ng-click die native JavaScript-Funktion nicht * –

Antwort

2

Wenn rufen Sie etwas in einem ng Sie auf den Parsing-Dienst wertet Ausdrücke gegen den Umfang statt dem globalen Fensterobjekt.

Wenn Sie innerhalb eines ng-Klicks eine Warnung ausgeben möchten, können Sie eine Methode für den Bereich oder den übergeordneten Bereich schreiben, der wiederum die Warnung aufruft.

1

Ich habe dieses jsFiddle erstellt, um zu zeigen, wie es funktioniert.

http://jsfiddle.net/tM56a/1/

<li ng-repeat="menu in menus" > 
    <a ng-click="test(menu)">click me</a> 
</li> 
20

Um DerekR Antwort zu klären.

Wenn Winkel

ng-click='alert("test")' 

sieht es sieht für

$scope.alert 

, die als undefiniert wahrscheinlich ist.

Sie müssen eine Proxy-Methode für den Bereich oder möglicherweise sogar rootscope bereitstellen.

Zum Beispiel:

$rootScope.log = function(variable) { 
    console.log(variable); 
}; 
$rootScope.alert = function(text) { 
    alert(text); 
}; 

See: http://deansofer.com/posts/view/14/AngularJs-Tips-and-Tricks-UPDATED#scopemethods

+0

Ausgezeichnete Lösung –