Angularjs 单击行上的按钮不会选择所选的行
我有一个测试模型表,其中我使用selectTest功能高亮显示选定的测试 现在单击tr标记(行)上的+/expander按钮时,包裹expander按钮的tr标记未设置为选中 我怎样才能做到这一点-不使用扩展器按钮的ng点击功能-Angularjs 单击行上的按钮不会选择所选的行,angularjs,Angularjs,我有一个测试模型表,其中我使用selectTest功能高亮显示选定的测试 现在单击tr标记(行)上的+/expander按钮时,包裹expander按钮的tr标记未设置为选中 我怎样才能做到这一点-不使用扩展器按钮的ng点击功能- <tr ng-repeat-start="person in tests" ng-click='selectTest($index)' ng-class='{selected: $index==selectedRow}'> <
<tr ng-repeat-start="person in tests" ng-click='selectTest($index)' ng-class='{selected: $index==selectedRow}'>
<td>
<button type="button" class="btn btn-default" ng-if="person.expanded" ng-click="person.expanded = false">-</button>
<button type="button" class="btn btn-default" ng-if="!person.expanded" ng-click="person.expanded = true">+</button>
</td>
<td>{{person.code}}</td>
<td>{{person.date}}</td>
<td>{{person.number}}</td>
<td>{{person.type}}</td>
</tr>
<tr ng-if="person.expanded" ng-repeat-end="">
// removed for brevity the rest of the table
$scope.selectTest = function (row) {
$scope.selectedRow = row;
};
-
+
{{person.code}
{{person.date}
{{person.number}
{{person.type}
//为简洁起见,删除了表格的其余部分
$scope.selectTest=函数(行){
$scope.selectedRow=行;
};
不建议使用索引突出显示选中的行,因为如果以后对数组进行排序或对源数组进行一些动态更改,该索引可能会更改。相反,你可以这样做:
<tr ng-repeat="person in persons " ng-click='selectPerson(person)' ng-class='{selected: (selectedPersons.indexOf(person.id) > -1)}'>
...
</tr>
$scope.selectedPersons = [];
$scope.selectPerson = function(person){
$scope.selectedPersons.push(person.id);
}
您有
ng repeat start
,但没有ng repeat end
除此之外,我不确定你还可能有什么错误,或者你使用的是哪个版本的angular
我已使用您的代码在此处创建了一个plnkr:
CSS
.selected{
color:Yellow;
}
angular.module('myApp',[]).controller('TodoCtrl',
function ($scope) {
$scope.tests = [];
$scope.tests.push({
code: 1,
date: '1/1/1',
number: 1,
type: 'type 1',
expanded:false
});
$scope.tests.push({
code: 2,
date: '2/2/2',
number: 2,
type: 'type 2',
expanded:false
});
$scope.selectTest = function(row) {
$scope.selectedRow = row;
};
});
JS
.selected{
color:Yellow;
}
angular.module('myApp',[]).controller('TodoCtrl',
function ($scope) {
$scope.tests = [];
$scope.tests.push({
code: 1,
date: '1/1/1',
number: 1,
type: 'type 1',
expanded:false
});
$scope.tests.push({
code: 2,
date: '2/2/2',
number: 2,
type: 'type 2',
expanded:false
});
$scope.selectTest = function(row) {
$scope.selectedRow = row;
};
});
html
<html>
<head>
<script data-require="angular.js@1.4.8" data-semver="1.4.8" src="https://code.angularjs.org/1.4.8/angular.js"></script>
<link rel="stylesheet" href="style.css" />
<script src="script.js"></script>
</head>
<body ng-app="myApp">
<div ng-controller="TodoCtrl">
<table>
<tbody>
<tr ng-repeat-start="person in tests" ng-click="selectTest($index)" ng-class="{selected: $index==selectedRow}">
<td>
<button type="button" class="btn btn-default" ng-if="person.expanded" ng-click="person.expanded = false">-</button>
<button type="button" class="btn btn-default" ng-if="!person.expanded" ng-click="person.expanded = true">+</button>
</td>
<td>{{person.code}}</td>
<td>{{person.date}}</td>
<td>{{person.number}}</td>
<td>{{person.type}}</td>
</tr>
<tr ng-if="person.expanded" ng-repeat-end="" >
<td colspan=5>EXPANDED</td>
</tr>
</tbody>
</table>
</div>
</body>
</html>
-
+
{{person.code}
{{person.date}
{{person.number}
{{person.type}
扩大
您在哪里将selectedRow
设置为所选行?(我们需要这些信息)在控制器中查看更新的代码。尝试将控制器主体更改为$parent.selectedRow=row代码>@OrelEraki我到底应该更改什么?当我刚刚替换$scope.selectedRow=row时;你的代码毫无意义。这与我最初的问题无关。你可以用我上面的例子来确切地说明你所说的你想做的事情。是的,我有一个ng重复开始和结束。因此,您的示例有效。没有-start/-end,我的代码就像你的一样。但是当我点击行本身和按钮时,我需要扩展+行选择。我更新了我的代码。