将值传递给AngularJS单击事件

时间:2013-10-16 19:43:19

标签: javascript angularjs

假设我有一个这样的表:

<tbody>
    <tr data-ng-repeat="object in objects">
        <td><input type="checkbox" value="{{object.id}}" data-ng-checked="object.checked" data-ng-mode="object.checked"/></td>
        <td>{{object.name}}</td>
        <td><a href="#" class="btn btn-default" data-ng-click="objectEdit()">Edit</a> <a href="#" class="btn btn-default">View</a></td>
    </tr>
</tbody>

正确通知objectEditobjects中引用{{1}}中的哪个条目的方法是什么?

抱歉,AngularJS newb。

2 个答案:

答案 0 :(得分:8)

修改:plunker上创建了一个演示。

您可以使用预期的行为,例如:

<a href="#" class="btn btn-default" data-ng-click="objectEdit(object)">Edit</a>

然后在范围内有这个方法

$scope.objectEdit = function(item){
}

没有在点击功能中传递对象

<a href="#" class="btn btn-default" data-ng-click="objectEdit()">Edit</a>

并且在范围内:

$scope.objectEdit = function(){
   this.item // access selected item
}

被调用函数上下文中的属性“item”始终可用,即使您将元素传递给函数,所以我建议不要将对象作为参数传递,我猜想它不那么冗长。

答案 1 :(得分:3)

您可以将其传递给函数:

ng-click="objectEdit(object)"

要从我的原始答案扩展(抱歉很短,因为它已在我的手机上得到解答),您可以在循环中将对象传递给您的函数。此外,有时它更有意义,特别是如果你有一个数组,当你在ng-repeat中循环时传入索引:

ng-click="objectEdit($index)"

这允许我们拼接或编辑数组中的元素:

$scope.objectEdit = function(i) {
   $scope.objects.splice(i,1);  // if we want to remove it in a delete function
   $scope.objects[i].name = 'new name';
};