2013-05-25 6 views
6

私はAngularJSを初めてお使いになりました。ng-repeatで生成されたラジオボタンをクリックすると、クリックイベントは発生しません。私は単純なonclickを使用する場合は、しかし、 が動作します。ng-clickはjavascriptグローバルファンクションを起動しません

これは動作しますが、私は警告を参照してください。

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

しかし、これはしません:

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

は私がクリックNGでこれを行うことができませんか?あるいは、私は「表現」が何であるか誤解していますか?

おかげで、 マイク

+0

は、この質問のタイトルの変更を検討し、それが問題とその解答を説明していません。この問題だけでなく、すべての指令や構造にも同じ問題が起こります。 * ng-clickのようなものがネイティブのJavaScript関数を認識しない可能性があります* –

答えて

2

あなたはNGクリックの内側に何かを呼び出すと解析サービスはスコープではなく、グローバルなwindowオブジェクトに対して式を評価します。

ng-clickの内部でアラートを行いたい場合は、スコープまたは親スコープにメソッドを書き込んで、そのスコープを呼び出してアラートを呼び出すことができます。

1

このjsFiddleを作成して動作を確認しました。

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

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

DerekRの答えを明確にします。

角度が

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

を見たとき、それは未定義する可能性がある

$scope.alert 

を探します。

スコープにプロキシメソッドを提供する必要があります。場合によってはrootscopeも指定する必要があります。例えば

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

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

+0

優れた解決策 –