【问题标题】:Angularjs Smart table not working for Dynamic dataAngularjs智能表不适用于动态数据
【发布时间】:2015-09-10 07:15:56
【问题描述】:

我有一种情况,我正在使用 angularJs 智能表进行过滤。

html:

<section class="main" ng-init="listAllWorkOrderData()">
    <table st-table="listWorkOrderResponse">
     <thead>
            <tr>
                <th st-sort="id">ID <i></i></th>
                <th st-sort="project">Project <i></i></th>
            </tr>
     </thead>
     <tbody ng-repeat="workOrder in listWorkOrderResponse">
             <tr>
                <td>{{workOrder.id}}</td>
                <td>{{workOrder.project}}</td>
             </tr>
             <tr>
                <td></td>
             </tr>
     </tbody>
    </table>
</section>

我正在测试两种不同的情况。

在我的控制器中,我首先调用相同的函数,但发送虚拟数组,在第二种情况下,我发送从 api 调用接收到的数组。

1. Dummy data


$scope.listAllWorkOrderData = function () {
     var listWorkOrderResponse = [{"id":"1","project":"project1"},{"id":2,"project":"project2"},{"id":"3","project":"project3"}];
    }

2. I am using a service and fetching data through api.

        $scope.listAllWorkOrderData = function () {
                    TestService.listAllWorkOrderData().then(function (response, status, headers, config) {
                        if (response != undefined && response != null) {
                            if (!$scope.listWorkOrderResponse) {
                                $scope.listWorkOrderResponse = [];
                            }
                            $scope.listWorkOrderResponse = response;
     }, function (response, status, headers, config) {
                        console.log(response);
                    });

当我使用 case1 时,排序工作正常。 但是当我使用 case2 时,排序不起作用。 Onclick 它的数据就消失了。 我尝试调试以查看当我们单击过滤器时是否再次调用 listAllWorkOrderData 函数。但它只是在加载页面以填充表格时调用一次。所以这意味着数据存在于 listWorkOrderResponse 中。那为什么不排序呢?

我通过打印它们检查了这两种情况的响应,我发现的唯一区别是来自 api 调用的 listWorkOrderResponse 添加了 $$hashKey: "object:363"

谁能指出我做错了什么。

【问题讨论】:

    标签: javascript angularjs smart-table


    【解决方案1】:

    我能够通过使用 stSafeSrc 属性解决此问题

    在控制器中我们添加

        $scope.listAllWorkOrderData = function () {
                    TestService.listAllWorkOrderData().then(function (response, status, headers, config) {
                        if (response != undefined && response != null) {
                            if (!$scope.listWorkOrderResponse) {
                                $scope.listWorkOrderResponse = [];
                            }
                            $scope.listWorkOrderResponse = response;
                            // we add one more list.
                            $scope.displayedWOList = [].concat($scope.listWorkOrderResponse);
     }, function (response, status, headers, config) {
                        console.log(response);
                    });
    

    然后在 html 表中添加 stSafeSrc 属性。

    Smart Table 文档中的 stSafeSrc 属性 http://lorenzofox3.github.io/smart-table-website/

    stSafeSrc 属性

    如果您异步引入数据(从 远程数据库、restful 端点、ajax 调用等),您必须使用 stSafeSrc 属性。您必须为两者使用单独的集合 基础和安全集合,否则您可能会陷入无限循环。

    <section class="main" ng-init="listAllWorkOrderData()">
            <table st-table="displayedWOList" st-safe-src="listWorkOrderResponse">
             <thead>
                    <tr>
                        <th st-sort="id">ID <i></i></th>
                        <th st-sort="project">Project <i></i></th>
                    </tr>
             </thead>
             <tbody ng-repeat="workOrder in displayedWOList">
                     <tr>
                        <td>{{workOrder.id}}</td>
                        <td>{{workOrder.project}}</td>
                     </tr>
                     <tr>
                        <td></td>
                     </tr>
             </tbody>
            </table>
        </section>
    

    【讨论】:

      【解决方案2】:

      为什么它不起作用我不知道,但你可以通过以下方式解决它

      重复您的响应并创建一个新对象并将其推送到数组中..

      var res = [];
      for(var i=0; i<response.length; i++) {
          var x = {"id":response[i].id, "project":response[i].project};
          arr[i] = angular.copy(x);
      }
      

      【讨论】:

      • 是的,但在该响应中,我们将删除 $$hashkey
      • 我不知道为什么会这样。但同样的问题也发生在我身上。
      • 好的。问题是从每一行中删除 $$hashkey 现在我必须迭代这个响应这么多次。这是可取的吗?
      • 如果您发现任何其他解决方案,只需删除它的 url。它也会帮助我学习
      • 我已经发布了解决方案,看看它是否也对你有帮助。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-07-02
      • 2019-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-28
      相关资源
      最近更新 更多