Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Smart-Table "st-sort" not working

I'm using angular v1.3.15. I'm fetching data by hitting an api and passing it through the scope to the smart table like so

enter image description here

Here is the data format of the 'scope.rowCollection' as seen on the console

enter image description here

Data populates fine but When i'm trying to click on the table-header and sort it using st-sort method, the table values go blank clearly not sorting the column. Here is a view of my html snippet

enter image description here

Can you please tell me what exactly am i doing wrong. The moment i use my own data collection set(NOT hard coded) the whole table values go haywire. I have a feeling its something to do with the variable names that i'm using on the angular end. Any help is much appreciated....Thanks

like image 392
Nikhil Nanjappa Avatar asked Mar 30 '15 10:03

Nikhil Nanjappa


3 Answers

If you are bringing in data asynchronously (from a remote database, restful endpoint, ajax call, etc) you must use the stSafeSrc attribute. You must use a seperate collection for both the base and safe collections or you may end up with an infinite loop.

Since I am getting data from restful service st-table="displayedCollection" st-safe-src="rowCollection" solve my issue

like image 86
Nayyar Abbas Avatar answered Oct 21 '22 08:10

Nayyar Abbas


Following your comment Nikhil. Use st-safe-src like so:

HTML

<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>

JS

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

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

That's it.

like image 27
Luis Crespo Avatar answered Oct 21 '22 06:10

Luis Crespo


I think it is trying to sort on row.name in the way that you code it. Try the following to see if it works:

     st-sort="employee.name"
like image 43
Kay Tsar Avatar answered Oct 21 '22 08:10

Kay Tsar