我有一个表的代码:
<table>
<tr data-ng-class="{clicked: row.current == true}"
data-ng-click="grid.view.forEach(function(object) { object.current = false; }); row.current = true"
data-ng-repeat="row in grid.view = (grid.data | filter:isInRange">
<td>{{ row.id }}</td>
<td>{{ row.current }}
我在ng-click行上遇到语法错误。我不确定我是否使用了正确的语法。我所拥有的是数组的每一行都包含字段和一些对象。我想为所有行设置字段current为false,然后为我单击的那个设置为true。如果我省略了点击的第一个javascript语句,则不会出现语法错误。
答案 0 :(得分:2)
在控制器中定义函数(或者你喜欢的任何地方),然后将其名称传递给你的标记:
$scope.x = function(){
// do some stuff
}
// in markup
<tr ng-click="x()">
我强烈建议尽可能在标记中抽象这些内容。将来会更加可维护。
答案 1 :(得分:1)
ng-click
和ng-repeat
中的代码是angular expressions并且分别是angular repeat expressions,而不是任意的java脚本代码。 Angular表达式是JavaScript的一个子集,由angular的$ parse服务处理。遗憾的是,表达式语法并没有很好地记录,但afaik并在检查角度源中的parse.js之后,不支持函数的定义(function(){ ...}
中的ng-click
部分)。我还认为,=
中的作业(ng-repeat
)并非真正受到支持。
在这些情况下,最好只调用@Sprottenwels在答案中指出的范围中定义的函数。
在旁注中,不是在每一行中都有一个布尔标志row.current
,在您的作用域中指向所选行的单个变量$scope.selectedRow
可能更简单。然后你的代码变成了:
<tr data-ng-class="{clicked: row == selectedRow}"
data-ng-click="selectRow(row)"
data-ng-repeat="row in grid.data | filter:isInRange">
// in the controller
$scope.selectRow = function(row) {
$scope.selectedRow = row;
}