AngularJs - 只允许在 Table 中选择一项

AngularJs - allow only one item to be selected in Table

我正在使用智能 table。我有一个逻辑,我只需要选择一个项目。我当前的 table 代码允许选择多行。

这是我的 HTML:

 <table st-safe-src="flow3.dataSet" st-table="flow3.displayed" class="table table-striped">

                <thead>
                <tr>
                    <th st-sort="method">Method</th>
                    <th st-sort="sample">Sample</th>
                    <th st-sort="parameters">Parameters</th>
                </tr>
                </thead>
                <tbody ui-sortable ng-model="flow3.displayed">
                <tr ng-repeat="row in flow3.displayed track by $index" style="cursor: move;" ng-click="row.selected = !row.selected; flow3.selectRow($event, row)" ng-class="{success: row.selected}">
                    <td>{{row.method.name}}</td>
                    <td>{{row.sample}}</td>
                    <td>
                        <span ng-repeat="parameter in row.parameters">{{parameter.methodInputParameter.name}} : {{parameter.value}}<br/></span>
                    </td>
                    <td>
                        <button type="button" ng-click="flow3.removeItem(row)"
                                class="btn btn-danger btn-sm btn-round pull-right"
                                ng-disabled="flow3.confirmDisabled">
                            <i class="glyphicon glyphicon-trash"></i>
                        </button>
                    </td>
                </tr>
                </tbody>
</table>

这是我的 JS:

 flow3.selectRow = function($event, row) {
        flow3.selectedItem = row; 
}

我建议您查看智能 table github 页面并使用指南 here

特别是与您的问题相关的部分是 'Select Data Rows'。

本质上,您需要使用 st-select-row 属性以及 st-select-mode 来配置 table 行 (tr) 元素中的点击。

如果你想要唯一一个 rowselected 属性 设置为 true,你应该修改你的 selectRow 方法来接受集合所有行,然后取消 select 所有行,然后 selecting 单击一个行:

flow3.selectRow = function($event, row, rows) {
  //de-select all
  angular.forEach(rows, function(r){ r.selected = false; });
  //select clicked
  row.selected = true;
  flow3.selectedItem = row; 
}
ng-click="flow3.selectRow($event, row, flow3.dataSet)"

如果你想对 clicked/selected 项目应用不同的 css class 你可能可以保留你的 selectRow 方法(因为我们有 selected item as flow3.selectedItem) 并将 ngClass 指令中的条件更改为(例如,如果行具有某些唯一 ID 属性):

ng-class="{success: row.id === flow3.selectedItem.id}"

希望对您有所帮助。