如何在ng repeat中使用ng click
How to use ng-click in ng-repeat?
我是Angular JS的新手,我正在尝试使用ng repeat在我的表中生成多行,每行中都应该有一个按钮来触发具有不同参数的函数
<div ng-controller="testing">
<table>
<thead>
<tr>
<th>col 1</th>
<th>col 2</th>
<th>button</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="item in items">
<td>{{ item.prop1 }}</td>
<td>{{ item.prop2 }}</td>
<td><button ng-click="myFunction(item.id)">Trigger Function</button></td>
</tr>
</tody>
</table>
</div>
这当然不起作用,因为ng repeat创建了自己的作用域,而myFunction是在父作用域(即测试控制器)中定义的。
然而,我在谷歌的结果中只能找到不起作用的原因,但缺乏解决问题的方法。我应该如何更正我的代码,以便ng-click正常工作?有没有办法在ng重复作用域内定义myFunction,或者有没有办法告诉我希望函数在父作用域中?
将ng-click
更改为以下
<button ng-click="testing.myFunction(item.id)">
通过ng重复使用track来提高ng重复性能
通过$index来跟踪你的ng重复和哪个ng点击被点击
<tr ng-repeat="item in items track by $index">
<td>{{ item.prop1 }}</td>
<td>{{ item.prop2 }}</td>
<td><button ng-click="myFunction($index,item.id)">Trigger Function</button></td>
</tr>
供参考
使用Angular做的第一件事可能就是如何使用ngRepeat。它如此简单,你一定会喜欢它。下面是一个例子:
<ul class="tasks">
<li ng-repeat="task in tasks" ng-class="{done: task.done}">
{{task.id}}: {{task.title}}
</li>
</ul>
问题
现在假设你在列表上方有一个按钮来刷新它
这种刷新的明显实现方式是在您的控制器中沿着以下几条线:
$scope.tasks = newTasksFromTheServer;
这是一段琐碎的代码,但它会导致ngRepeat删除现有任务的所有li元素并重新创建它们,这可能会很昂贵(例如,我们有很多li元素,或者每个li的模板都很复杂)。这意味着要进行大量的DOM操作。
Angular为什么要这么做?在幕后,ngRepeat为每个任务添加了$$hashKey属性以跟踪它。如果你用服务器上的新任务对象替换原始任务,即使这些对象实际上与你的原始任务完全相同,它们也不会有$$hashKey特性,因此ingRepeat不会知道它们代表相同的元素。
跟踪营救
在Angular 1.2中,对ngRepeat的语法进行了新的添加:令人惊叹的trackby子句。它允许您为ngRepeat指定自己的密钥来识别对象,而不仅仅是生成唯一的ID。
这意味着您可以将上面的内容更改为ng-reeat="tasks-in-tasks-track-by-task.id",并且由于id在原始任务和服务器更新的任务中都是相同的,ng-Reeat将知道不要重新创建DOM元素并重用它们。繁荣
如果你的数据源有重复的数据,你也可以使用"跟踪$index"
//以下代码将抛出错误:在中继器中重复密钥
<div ng-repeat="value in [4, 4]"></div>
//下面的代码将工作得非常好
<div ng-repeat="value in [4, 4] track by $index"></div>
- Angular,表达式{{}}的结果没有插入到ng-click中
- Ng隐藏在Ng-click元素之外
- 如何在ng-click中传递php对象
- AngularJs的ng-click$事件将子元素作为目标传递
- 使用jqGrid列格式化程序函数使ng-click工作
- 在Angularjs中,我如何使用ng repeat、ng model和ng click来动态更改内容
- ng-click指令没有调用整个函数
- 在控制器中添加$location依赖项时,ng-click停止激发
- 如何在ng repeat中使用ng click
- 将我的列表 vom ng-repeat 更改为收集重复 ng-click 后,无法正常工作
- 在 ng-click 中设置$scope变量指令
- 在 Angular 指令中定义一个用于 ng-click 的函数
- 为什么我们需要 ng-click
- (angularJS)使ng-click在ng-repeat上打开一个链接
- 为什么ng-click被称为按钮被点击的次数
- AngularJS:如何防止ng-click以子元素为目标
- 另一个 ng-click() 未按预期工作
- 角度:编译谷歌地图信息窗口内容以使用ng-click
- 是否可以在 ng-click 中调用函数字符串
- 如何在 ng-click 函数中更改$rootScope值