我正在使用智能表,我需要预先选择特定行。
因此,在加载我的列表后,我循环进入它并设置isSelected
当我到达我想要选择的项目时属性:
// 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;
}
}
它工作正常,但是当我想选择另一行时,预选的行不会被取消选择!我必须单击它来手动取消选择它,然后才能正确选择另一行。
这是解释该问题的 JSFiddle:http://jsfiddle.net/6pykn5hu/3/ http://jsfiddle.net/6pykn5hu/3/
我尝试了那里的建议智能表 - 选择显示的第一行(angularjs) https://stackoverflow.com/questions/29193530/smart-table-select-first-row-displayed-angularjs但没有设法让一些东西发挥作用。
Thanks
所以我浏览了他们的指示 https://github.com/lorenzofox3/Smart-Table/blob/master/src/stSelectRow.js正如你所看到的,它调用了父指令中的函数stTable
. The row
绑定到一个点击处理程序...它调用ctrl.select()
函数来自stTable
该函数依次存储最后选择的row
。这是您的问题,因为此事件不会触发,它永远不会设置最后单击的行,因此永远不会删除其类。我为您重写了该指令,以便它能够满足您想要实现的目标,但它可以很容易地得到改进。
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');
}
});
}
}
})
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)