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

Mic*_*ier 6 javascript angularjs

我是AngularJS的新手,我点击ng-repeat生成的单选按钮,点击事件拒绝触发.如果我使用简单的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>
Run Code Online (Sandbox Code Playgroud)

但这不是:

<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>
Run Code Online (Sandbox Code Playgroud)

我不能用ng-click做到这一点吗?或者我误解了"表达"是什么?

谢谢,迈克

小智 20

澄清DerekR的答案.

当角度看到

ng-click='alert("test")'
Run Code Online (Sandbox Code Playgroud)

它寻找

$scope.alert
Run Code Online (Sandbox Code Playgroud)

这可能是未定义的.

您需要在范围上提供代理方法,甚至可能在rootscope上提供代理方法.

例如:

$rootScope.log = function(variable) {
    console.log(variable);
};
$rootScope.alert = function(text) {
    alert(text);
};
Run Code Online (Sandbox Code Playgroud)

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


Der*_*ekR 2

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

如果您想在 ng-click 内部执行警报,则可以在作用域或父作用域上编写一个方法来调用警报。