ng-click不会触发javascript全局函数

时间:2013-05-25 01:09:34

标签: javascript angularjs

我是AngularJS的新手,我点击了生成的单选按钮 ng-repeat,并且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做到这一点吗?或者我误解了“表达”是什么?

谢谢, 麦克

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

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

如果您想在ng-click内部发出警报,那么可以在范围或父范围上编写一个方法,然后再调用警报。

答案 2 :(得分:1)

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

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

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