#php #mysql #angularjs #angularjs-directive #angularjs-scope
#php #mysql #angularjs #angularjs-директива #angularjs-scope
Вопрос:
Прежде всего, я хочу прояснить, что я не получаю доступ к данным с помощью веб-службы. Моя база данных (php) и пользовательский интерфейс angularjs находятся на одном сервере.
В службе AngularJS я отправляю http-запрос Get на interface.php (База данных) он возвращает формат json. Я не знаю, как на самом деле проанализировать данные и отправить их на контроллер?
Здесь четкий код 🙂
var app=angular.module(«app.chart.ctrls»,[‘ngSanitize’]);
Контроллер
app.controller("registrationCtrl",["$scope","$location","logger","registerService",function($scope,$location,logger,registerService){
$scope.data= registerService.getYears();
**how to parse the data is it correct format or not ? in Controller**
}
**Service**
app.factory('registerService', function ($http,$q,$log) {
return {
getYears:function () {
var deferred = $q.defer();
$http({
method : "GET",
url : "interface.php",
}).success(function(data){
**** How to Return the data from here to Controller ***
})
},
}
});
interface.php
Комментарии:
1.
deferred.resolve(JSON.parse(data))
затем в конце функции getYearsreturn deferred.promise
2. Попробуйте вернуть обещание $ http в функции getYears, angular разрешает обещания по умолчанию. Если это не сработает, попробуйте использовать
q
promises.3. $data = [{«id»: 1,»year»:1222},{«id»:2,»year»:343},{«id»:3, «year»:2323},]; возвращает json_encode($data) Это мои данные, которые возвращаются из interface.php к сервису, затем как отправить из сервиса на контроллер, затем на контроллере, как получить доступ в соответствии с столбцом 🙂 @JonathandeM.
Ответ №1:
1. Сначала определите объект в вашем контроллере, который позже вы сможете использовать в качестве хранилища для вашего http-ответа следующим образом :
app.controller("registrationCtrl",["$scope","$location","logger","registerService",function($scope,$location,logger,registerService){
$scope.data = {};
// fire your servise function like this :
registerService.getYears($scope);
}
2- В вашем сервисе :
app.factory('registerService', function ($http) {
return {
getYears:function (scope) {// scopes comes from your controller
$http({method : "GET",url : "interface.php"})
.success(function(data){
scope.data = data;!!!!!!
})
}
}
});
Это сделано до сих пор, и это будет работать ;
НО если вы хотите использовать какое-то обещание, вы можете сделать так :
в вашем контроллере :
.
.
.
$scope.data = {};
// fire your servise function like this :
var promise = registerService.getYears();
promise.then(function(msg){
$scope.data = msg.data[0];
});
.
.
.
в вашем сервисе :
app.factory('registerService', function ($http) {
return {
getYears:function () {
var promise = $http({method : "GET",url : "interface.php"});
}
return promise ;
});
Ответ №2:
из https://docs.angularjs.org/tutorial/step_11
источник:
[
{
"age": 13,
"id": "motorola-defy-with-motoblur",
"name": "Motorola DEFYu2122 with MOTOBLURu2122",
"snippet": "Are you ready for everything life throws your way?"
...
},
...
]
ваш сервис выглядит так:
phonecatServices.factory('Phone', ['$resource',
function($resource){
return $resource('phones/:phoneId.json', {}, {
query: {method:'GET', params:{phoneId:'phones'}, isArray:true}
});
}]);
и ваш контроллер:
phonecatControllers.controller('PhoneListCtrl', ['$scope', 'Phone', function($scope, Phone) {
$scope.phones = Phone.query();
$scope.orderProp = 'age';
}]);
итак, вы вызываете службу из контроллера и получаете результаты обратно.