Javascript 智能表格-预选特定行

Javascript 智能表格-预选特定行,javascript,angularjs,smart-table,Javascript,Angularjs,Smart Table,我正在使用智能表,需要预选一行 因此,在加载列表后,当我到达要选择的项目时,我循环到列表中并设置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') {

我正在使用智能表,需要预选一行

因此,在加载列表后,当我到达要选择的项目时,我循环到列表中并设置
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;
    }
}
//预选一行
对于(变量i=0,len=scope.displayCollection.length;i
它工作正常,但当我想选择另一行时,预选的行不是未选择的!我必须点击它手动取消选择,然后才能正确选择另一行

下面是一个解释问题的JSFIDLE:

我尝试了那里提出的建议,但没有成功


谢谢

我终于找到了解决方案:

不再使用
$watch
,而是在每行上单击
ng

<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;
}
scope.selectRow=函数(行){
对于(变量i=0,len=scope.displayCollection.length;i
工作区:

如果有人有更好的解决方案,我愿意接受其他建议:)

因此我查看了他们的解决方案,因为您可以看到它调用父指令stTable中的函数。
绑定到一个单击处理程序…该处理程序从
stTable
调用
ctrl.select()
函数。此函数依次存储最后选择的
。这是您的问题,因为此事件不会触发,它从不设置最后单击的行,因此从不希望删除其类。我为您重新编写了指令,以便它能够实现您试图实现的目标,但它可以很容易地得到改进

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');
          }
        });
      }
  }
})

我不想重新定义现有的指令,但我更喜欢这个解决方案。ThanksI使用了这个方法,为了避免迭代,最好使用数组的索引,并在删除isSelected值时使用它。更新的JSFIDLE: