Smart-Table - 预选特定行
Smart-Table - Preselect a specific row
我正在使用 smart-table,我需要预先select一个特定的行。
所以在加载我的列表后,我循环进入它并在我到达我想要的项目时设置 isSelected
属性 select:
// Preselect a row
for (var i = 0, len = scope.displayCollection.length; i < len; i += 1) {
var person = scope.displayCollection[i];
if (person.firstName === 'Blandine') {
person.isSelected = true;
scope.selected = person;
break;
}
}
它工作正常,但是当我想 select 另一行时,预selected 行没有被取消select!我必须单击它以手动取消 select 它,然后才能正确 select 另一行。
这是一个解释问题的 JSFiddle:http://jsfiddle.net/6pykn5hu/3/
我尝试了那里的建议Smart-Table - Select first row displayed (angularjs),但没有成功。
谢谢
终于找到了解决办法:
不再是 $watch
,而是每行 ng-click
:
<tr st-select-row="row" ng-repeat="row in displayCollection" ng-click="selectRow(row)">
我在选择点击的行之前手动取消选择所有行:
scope.selectRow = function (row) {
for (var i = 0, len = scope.displayCollection.length; i < len; i += 1) {
scope.displayCollection[i].isSelected = false;
}
row.isSelected = true;
scope.selected = row;
}
工作 JSFiddle:http://jsfiddle.net/6pykn5hu/6/
如果有人有更好的解决方案,我愿意接受其他建议:)
所以我查看了他们的 directive,你可以看到它在父指令 stTable
中调用了一个函数。 row
绑定到点击处理程序...从 stTable
调用 ctrl.select()
函数,此函数依次存储最后选择的 row
。这是您的问题,因为此事件不会触发,它永远不会设置最后单击的行,因此永远不会删除它的 class。我为您重写了该指令,以便它可以满足您想要实现的目标,但它可以很容易地得到改进。
app.directive('prSystem', function () {
return {
restrict: 'A',
require: '^stTable',
scope: {
row: '=prSystem'
},
link: function (scope, element, attr, ctrl) {
var mode = attr.stSelectMode || 'single';
if(scope.row.isSelected) {
scope.row.isSelected = undefined;
ctrl.select(scope.row, mode);
}
element.bind('click', function () {
scope.$apply(function () {
ctrl.select(scope.row, mode);
});
});
scope.$watch('row.isSelected', function (newValue) {
if (newValue === true) {
element.addClass('st-selected');
} else {
element.removeClass('st-selected');
}
});
}
}
})
我正在使用 smart-table,我需要预先select一个特定的行。
所以在加载我的列表后,我循环进入它并在我到达我想要的项目时设置 isSelected
属性 select:
// Preselect a row
for (var i = 0, len = scope.displayCollection.length; i < len; i += 1) {
var person = scope.displayCollection[i];
if (person.firstName === 'Blandine') {
person.isSelected = true;
scope.selected = person;
break;
}
}
它工作正常,但是当我想 select 另一行时,预selected 行没有被取消select!我必须单击它以手动取消 select 它,然后才能正确 select 另一行。
这是一个解释问题的 JSFiddle:http://jsfiddle.net/6pykn5hu/3/
我尝试了那里的建议Smart-Table - Select first row displayed (angularjs),但没有成功。
谢谢
终于找到了解决办法:
不再是 $watch
,而是每行 ng-click
:
<tr st-select-row="row" ng-repeat="row in displayCollection" ng-click="selectRow(row)">
我在选择点击的行之前手动取消选择所有行:
scope.selectRow = function (row) {
for (var i = 0, len = scope.displayCollection.length; i < len; i += 1) {
scope.displayCollection[i].isSelected = false;
}
row.isSelected = true;
scope.selected = row;
}
工作 JSFiddle:http://jsfiddle.net/6pykn5hu/6/
如果有人有更好的解决方案,我愿意接受其他建议:)
所以我查看了他们的 directive,你可以看到它在父指令 stTable
中调用了一个函数。 row
绑定到点击处理程序...从 stTable
调用 ctrl.select()
函数,此函数依次存储最后选择的 row
。这是您的问题,因为此事件不会触发,它永远不会设置最后单击的行,因此永远不会删除它的 class。我为您重写了该指令,以便它可以满足您想要实现的目标,但它可以很容易地得到改进。
app.directive('prSystem', function () {
return {
restrict: 'A',
require: '^stTable',
scope: {
row: '=prSystem'
},
link: function (scope, element, attr, ctrl) {
var mode = attr.stSelectMode || 'single';
if(scope.row.isSelected) {
scope.row.isSelected = undefined;
ctrl.select(scope.row, mode);
}
element.bind('click', function () {
scope.$apply(function () {
ctrl.select(scope.row, mode);
});
});
scope.$watch('row.isSelected', function (newValue) {
if (newValue === true) {
element.addClass('st-selected');
} else {
element.removeClass('st-selected');
}
});
}
}
})