Я использую 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, поэтому я пытаюсь выяснить, что лучше всего подходит для такого типа ситуации.
То, что я хотел бы видеть в качестве вывода, - это подсчет всех записей с расположением "Даллас" или в среднем по количеству баллов из всех записей из "Далласа". Есть много других вещей, которые я хотел бы сделать, но я понимаю, как делать простые манипуляции с данными, как упомянутые, поможет мне в других приложениях данных.
Использование 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 }
, который должен быть в формате, который вы хотите, учитывая ваши потребности выше.