【问题标题】:Angular checkbox input ng-click never called角度复选框输入 ng-click 从未调用过
【发布时间】:2015-09-27 12:59:20
【问题描述】:

在我的 Angular 应用程序中,我有一个带有复选框输入的表单:

<div ng-repeat="partner in type.partners">
    <label class="checkbox-inline">
        <input type="checkbox" value="partner"
        ng-checked="report.participatingPartners[$parent.$index].indexOf(partner) !== -1" 
        ng-click="toggleSelection($parent.$index, $index);">
        <p><span></span>{{partner.name}}<p>
    </label>
</div>

在我的控制器中,只是为了测试这个设置:

var vm = this;
vm.toggleSelection = toggleSelection;

...

function toggleSelection(typeId, partnerId) {
    console.log("toggleSelection called");
    console.log(typeId, partnerId);
}

当我单击复选框或其标签时,永远不会调用此函数。这是为什么呢?

我知道这不是 controllerAs 语法,因为其他函数工作正常。

【问题讨论】:

  • 如果你使用controller as,你是不是在toggleSelection(...)函数前面漏掉了你的controller的名字?

标签: javascript angularjs checkbox


【解决方案1】:

您可能要使用的属性是ng-change。角度输入指令没有ng-clickedng-checked

docs

【讨论】:

    【解决方案2】:

    通过将您尝试在ng-click 中引用的函数放在$scope 而不是this 上,点击事件应该会根据需要进行绑定。

    在控制器上...

    $scope.toggleSelection = toggleSelection;
    
     function toggleSelection(typeId, partnerId) {
        ...
    }
    

    在你的 html...

    <input type="checkbox" value="partner"
        ng-click="toggleSelection($parent.$index, $index);">
    

    这是一个简单的Fiddle 它的工作原理。

    【讨论】:

    • 为什么? 'this' 语法不应该与作用域完全一样吗?
    • 因为this 指的是控制器对象而不是$scope 对象。这是两个不同的东西。 $scope 是控制器向视图公开的 API。视图无法访问控制器对象上的功能。为了澄清阅读这个出色的答案stackoverflow.com/a/14168699
    【解决方案3】:

    你写了下面的代码:

    ng-checked="vm.toggleSelection($parent.$index, $index);"
    

    但应该是:

    ng-checked="toggleSelection($parent.$index, $index);"
    

    只需删除“vm”

    【讨论】:

    • 对不起,不是这样,这实际上是我复制粘贴的错误。
    • @Tiago 请在 JS Fiddle 或 Plunker 上提供代码。
    • 你说他写了他没有写的一行……你搞砸了;)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-16
    • 2016-11-12
    • 1970-01-01
    • 2015-09-01
    • 2013-12-15
    相关资源
    最近更新 更多