AngularJS智能表格文档/演示车是否有问题?

AngularJS智能表格文档/演示车是否有问题?,angularjs,smart-table,Angularjs,Smart Table,我就是不明白。在上,其中讨论了stSafeSrc attriubute,我看不出$scope在哪里。displayedCollection被声明 文本中说智能表首先创建所显示集合的安全副本,然后 我假设有一个智能表指令在声明它,但是示例代码对我来说不起作用——表行是空的——在我看来这就是问题所在 例如,如果我们查看接受的答案,就会看到用户将$scope.displayedCollection声明为空数组,并在收到AJAX响应时为其赋值。但是,文档中没有提到这一点 <table st-tab

我就是不明白。在上,其中讨论了
stSafeSrc
attriubute,我看不出
$scope在哪里。displayedCollection
被声明

文本中说
智能表首先创建所显示集合的安全副本
,然后

我假设有一个智能表指令在声明它,但是示例代码对我来说不起作用——表行是空的——在我看来这就是问题所在

例如,如果我们查看接受的答案,就会看到用户将
$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;
    });
});

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


为什么smart table网站上的示例在没有它的情况下可以工作?

不,它不是bug。SmartTables将创建一个
$scope.displayedCollection
对象,或者如果您使用
stSafeSrc
属性,则创建用于数组的任何名称,该数组将保存原始数据的副本。如果它没有显示任何数据,请检查
rowCollection
对象,它应该包含原始数组。如果您使用的是Chrome浏览器,请尝试,以便查看应用程序的范围。另外,如果你能发布一个你的代码,它会更好

我们可以通过查看(这不是我的),来说明用户必须采取行动来制作一个副本,并使其与AJAX数据保持同步

如果我们将第18行注释掉:

$scope.displayedCollection = [].concat($scope.rowCollection);
根据联机示例,表变为空

结论:网站文档中的说法是错误的

智能表首先创建所显示集合的安全副本


奇怪的是,网站上的(工作)示例。。。不应该工作(?)

你不需要复制任何东西。使用属性st table设置的只是模板的占位符(即范围中的变量),您可能会在行中继器中使用该占位符,它不必在任何地方声明,智能表格将为该变量分配要显示的项目,以便更新模板

您的真实来源(即数据)应该是绑定到st safe src属性的集合。每当绑定集合发生更改时,智能表都会更新本地副本,以便根据最新和实际数据执行筛选/排序/切片操作

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


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

仅当我在代码中进行复制时,它才对我有效,而不是当我不进行复制时。我的代码太大,无法发布,但您可以在第18行中看到同样的内容,在plunker上使用的Smart table和angular版本非常旧…这可以解释(+1)。我会尽量找时间更新Plunk(尽管我在家里使用的是最新版本&仍然有相同的情况)。
 //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);
$scope.displayedCollection = [].concat($scope.rowCollection);