AngularJS smart-table documentation/demo 有问题吗?

Is the AngularJS smart-table documentation/demo buggy?

我只是不明白这一点。在 the smart-table web page 上,它讨论了 stSafeSrc 属性,我没有看到 $scope. displayedCollection 在哪里声明。

文字说smart-table first creates a safe copy of your displayed collection,我

我曾假设智能-table 指令正在声明它,但示例代码对我不起作用 – table 行是空的 – 这就是我所期待的是问题所在。

例如,如果我们查看 的已接受答案,我们会看到用户将 $scope.displayedCollection 声明为空数组并在 AJAX 响应时为其分配一个值收到。但是,文档没有提到这一点。

<table st-table="displayedCollection" st-safe-src="rowCollection">
      <thead>
        <tr>
          <th st-sort="firstName">First Name</th>
          <th st-sort="lastName">Last Name</th>
        </tr>
      </thead>
      <tbody>
        <tr ng-repeat="row in displayedCollection">
          <td>{{row.firstName}}</td>
          <td>{{row.lastName}}</td>
        </tr>
      </tbody>
</table


app.controller('Ctrl', function($scope, service) {
    $scope.displayedCollection = [];

    service.all.then(function(list) {
        $scope.rowCollection = list;
        $scope.displayedCollection = list;
    });
});

那么,我需要自己处理副本吗?文档是否需要更新?演示如何工作?


[更新] 我在 the github issues 上找到这个,@tufan-yoc

you have to copy the data array to an other variable in the scope:

st-table="displayedCollection" st-safe-src="rowCollection"

and

 //copy the references (you could clone ie angular.copy   
 // but then have to go through a dirty checking for the matches)
    $scope.displayedCollection = [].concat($scope.rowCollection);

如果这确实是一项要求,为什么没有明确记录?

为什么 smart-table 网站上的示例没有它也能正常工作?

不,这不是越野车。如果您使用 stSafeSrc 属性,SmartTables 将创建一个 $scope.displayedCollection 对象或您为数组使用的任何名称,它将保存原始数据的副本。如果它没有显示任何数据,请检查您的 rowCollection 对象,它应该包含原始数组。如果您在 Chrome 工作,请尝试 ng-inspector for AngularJS,这样您就可以看到您的应用程序的范围。另外,如果您可以 post 窃取您的代码,那就更好了。

我们可以通过查看 this Plunk(不是我的)来证明用户必须采取行动来制作副本并使其与 AJAX 数据同步。

如果我们注释掉第18行:

$scope.displayedCollection = [].concat($scope.rowCollection);

根据在线示例,table 变为空。

结论:网站文档说错了

smart-table first creates a safe copy of your displayed collection

而且,奇怪的是,网站上的(有效)示例……不应该有效 (?)

您无需复制任何内容。您使用属性 st-table 设置的只是模板的占位符(即范围中的变量),您可能会在行转发器中使用它,它不必在任何地方声明,smart-table会将要显示的项目分配给此变量,以便更新您的模板。

您的真实来源(即您的数据)应该是您绑定到 st-safe-src 属性的集合。每当绑定的集合发生变化时,smart table 将更新本地副本,以便它可以根据最新的实际数据执行 filter/sort/slice 操作。

但是为了方便(和性能),如果你不打算修改你的数据(或者它的到达没有像 ajax fetch 那样延迟),内部副本首先基于绑定到的任何集合st-table 属性设计的范围内的变量。 请注意,在这种情况下,该值将被删除并替换为显示的集合,以便更新模板。幸运的是,初始副本将作为 smart-table.

的私有变量保留

如果您遇到问题,它可能来自其他地方。如果是,请提供一个 运行 示例(使用 angular 版本和智能 table 版本)