6

我是 AngularJS 的新手,我在 ng-repeat 生成的单选按钮上单击了 ng-click,并且 click 事件拒绝触发。如果我使用简单的onclick,那确实有效。

这有效,我看到了警报:

<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-click 做到这一点吗?还是我误解了什么是“表达”?

谢谢,迈克

4

3 回答 3

20

澄清 DerekR 的答案。

当角度看到

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

它寻找

$scope.alert

这可能是未定义的。

您需要在作用域上提供代理方法,甚至可能是根作用域。

例如:

$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

于 2014-02-24T00:53:30.440 回答
2

当您在 ng-click 中调用某些内容时,解析服务会根据范围而不是全局窗口对象评估表达式。

如果您想在 ng-click 内发出警报,则可以在作用域或父作用域上编写一个方法,然后调用该警报。

于 2013-05-25T01:15:10.030 回答
1

我创建了这个 jsFiddle 来展示它是如何工作的。

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

<li ng-repeat="menu in menus" >
     <a ng-click="test(menu)">click me</a>
</li>
于 2013-05-25T02:39:51.573 回答