ui-使用相同的数据源滚动两个 table 并同步滚动两个 table

ui-scroll two table using the same datasource and scrolling in sync of both tables

我在我的应用程序中使用 ui-scroll 并且 运行 遇到了一些问题。

我想 运行 ui-滚动用于 build 两个 table 的同一个数据源,然后滚动一个 table 它应该还滚动通过相同数据源创建的另一个 table。

我尝试使用以下示例代码来实现,但它不起作用。

滚动任何 table 时,列表的行为很奇怪;它会增加列表的大小并显示空行。它可以在附加的plunker中注意到。

如果我更改数据,它只会影响第一个 table 而第二个不会更新列表。

我也无法同步(很抱歉这个愚蠢的问题,如果有人能帮忙的话)。

这是我的做法:

模板:

<table border="1"> 
  <tbody>
    <td>
      <table> 
        <tbody id="first-tbody" ui-scroll-viewport style="height: 400px">
          <tr ui-scroll="item in datasource" adapter="adapter" start-index="0">
            <td>{{item}}</td>
          </tr>
        </tbody>
      </table>
    </td>
    <td> 
      <table>
        <tbody id="second-tbody" ui-scroll-viewport style="height: 400px">
          <tr ui-scroll="item in datasource" adapter="adapter2" start-index="0">
            <td>{{item}}</td>
          </tr>
        </tbody>
      </table>
    </td>
  </tbody>
</table>

控制器:

var datasource = {};
datasource.get = function (index, count, success) {
    $timeout(function () {
        var result = [];
        for (var i = index; i <= index + count - 1; i++) {
            result.push("item #" + i);
        }
        success(result);
    }, 100);
};
$scope.datasource = datasource;

https://plnkr.co/edit/CBPDlqx5P6Rc4tPZzGaw?p=preview

如有任何帮助,我们将不胜感激。 TIA

当滚动速度太快时,ui-scroll 为某些滚动计算添加的第一行和最后一行的高度往往大于 100 像素。如何应对?我可以隐藏它们吗?

这是展示它外观的图片:

在这些模板中显示 css-属性 时出现问题,将两个视口提取到单独的 div-容器中似乎是个好主意...以下代码修复空行问题:

<table border="1"> 
  <tbody>
    <td>
      <div ui-scroll-viewport style="height: 400px;">
        <table> 
          <tbody id="first-tbody" >
            <tr ui-scroll="item in datasource" adapter="adapter" start-index="0">
              <td>{{item}}</td>
            </tr>
          </tbody>
        </table>
      </div>
    </td>
    <td> 
      <div ui-scroll-viewport style="height: 400px;">
        <table>
          <tbody id="second-tbody" >
            <tr ui-scroll="item in datasource" adapter="adapter2" start-index="0">
              <td>{{item}}</td>
            </tr>
          </tbody>
        </table>
      </div>
    </td>
  </tbody>
</table>

更新后的演示在这里:https://plnkr.co/edit/JjAiw3zvG4uIWGNjLUU7


关于 2 个视口滚动同步,我想,以下方法可能有效:

$scope.datasource = {};
$scope.datasource.get = function (index, count, success) {
    var result = [];
    for (var i = index; i <= index + count - 1; i++) {
        result.push("item #" + i);
    }
    success(result); 
};

const vp1 = document.getElementById('vp1');
const vp2 = document.getElementById('vp2');
vp1.addEventListener('scroll', function() {
    vp2.scrollTop = vp1.scrollTop;
});

其中 "vp1" 和 "vp2" 是视口的 ID。