2013-05-25 28 views
6

Tôi mới dùng AngularJS và tôi đã đặt một nút bấm ng trên một nút radio được tạo bởi ng-lặp lại và sự kiện nhấp từ chối kích hoạt. Nếu tôi sử dụng một onclick đơn giản, làm việc mặc dù.ng-click không kích hoạt chức năng toàn cầu javascript

này hoạt động, và tôi thấy cảnh báo:

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

Nhưng điều này không:

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

Tôi có thể không làm điều này với một ng-click? Hay tôi hiểu lầm một "biểu hiện" là gì?

Cảm ơn, Mike

+0

Hãy xem xét việc thay đổi tiêu đề của câu hỏi này, nó không mô tả các vấn đề và câu trả lời của nó. Cùng một vấn đề sẽ xảy ra với bất kỳ chỉ thị hoặc cấu trúc nào, không chỉ là vấn đề này. Có thể một cái gì đó như * ng-click không nhận ra chức năng javascript gốc * –

Trả lời

2

Khi bạn gọi một cái gì đó bên trong một ng-click vào dịch vụ phân tích đánh giá biểu thức so với phạm vi chứ không phải là đối tượng cửa sổ toàn cầu.

Nếu bạn muốn thực hiện cảnh báo bên trong một cú nhấp chuột thì có thể viết phương thức trên phạm vi hoặc phạm vi gốc mà lần lượt gọi cảnh báo.

1

Tôi đã tạo jsFiddle này để cho biết cách hoạt động của nó.

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

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

Để làm rõ câu trả lời DerekR của.

Khi góc nhìn

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

nó trông cho

$scope.alert 

đó là khả năng được xác định.

Bạn cần cung cấp phương thức proxy trên phạm vi hoặc thậm chí là rootscope.

Ví dụ:

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

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

+0

Giải pháp tuyệt vời –

Các vấn đề liên quan