如何使用Angularjs操作从SQL返回的数据

时间:2015-07-20 17:29:29

标签: php mysql sql angularjs pdo

我使用AngularJS来调用SQL查询并返回整个表。有没有办法在检索数据后操作前端的数据,或者在返回Angular之前更好地在处理页面上进行操作?

下面的代码显示了我用来检索数据的app.js文件,我已经包含了一行HTML来显示我想要实现的输出类型的示例。

app.js

var dashboardApp = angular.module('dashboardApp', []);
dashboardApp.controller('dashboardController', function($scope, $http, $location, $anchorScroll) {

    $http.get('lib/dbp.php').success(function(data) {
      $scope.surveydata = data;
    }); 

});

示例HTML

<ul>
    <li ng-repeat="item in surveydata['data']">{{item.location}}</li>
</ul>

{{surveydata['data'].location.length}}

示例输出

{ "data": [ 
  { 
    "surveyid": "51", 
    "customerName": "Steve Jones", 
    "companyName": "Acme", 
    "projectName": "Various Project", 
    "customerPhone": "", 
    "customerEmail": "", 
    "location": "Dallas", 
    "q1": "1", 
    "q1Comment": "None", 
    "q2": "1", 
    "q2Comment": "None", 
    "q3": "1", 
    "q3Comment": "None", 
    "q4": "2", 
    "q4Comment": "None", 
    "q5": "1", 
    "q5Comment": "None", 
    "q6": "Yes", 
    "q6Comment": "Always.", 
    "q7": "Yes", 
    "q7Comment": "Always.", 
    "q8": "Yes", 
    "q8Comment": "Certainly.", 
    "q9": "Yes", 
    "q9Comment": "None", 
    "q10Comment": "None", 
    "q11Comment": "Keep up the good work!", 
    "q12": "No", 
    "timestamp": "2015-07-17 11:08:24", 
    "ipaddress": "" 
  }

ng-repeat部分适用于基本数据输出但使用location.length我真正想要做的是能够单独计算位置数,即第1区有5个提交的调查或区域2有8。

我是Angularjs的新手,所以我想弄清楚这种情况的最佳做法是什么。

我希望看到的输出是“达拉斯”位置的所有记录的计数或“达拉斯”所有记录的平均分数。还有很多其他我想做的事情,但是掌握如何进行简单的数据操作,就像上面提到的那样,可以帮助我进行其他数据应用。

1 个答案:

答案 0 :(得分:0)

使用SQL查询始终返回整个表通常不是一个好习惯。如果您保证永远拥有一张小桌子,这是可以接受的(一个强有力的声明)。否则,最好将查询定位到将要呈现的任何数据,并使用第二个查询来获取高级信息,例如count。

我不知道你的后端是什么样的,但是一种典型的方法就是这样(伪代码):

data = {}
SELECT surveyid, customerName, ... FROM "YourTable" WHERE (...) LIMIT 48 OFFSET 0;
response -> data.rows = response
SELECT count(*) FROM "YourTable" WHERE (...);
response -> data.count = response
return data

然后在前端你操纵{ rows: [...], count: 123 },根据你的需要,你应该采用你想要的格式。