Come ottenere il risultato del metodo di servizio in JS angolare?
-
20-12-2019 - |
Domanda
Ho questo codice:
PostApp.factory('loadPage', function ($http) {
return {
loadOtherPage: function (page, status, permition, order, cultureId) {
$http({
url: '/Administrator/Post/PagedIndex',
method: "POST",
data: { page: page, status: status, permition: permition, order: order, cultureId: cultureId }
}).success(function(data) {
return data;
});
}
};
.
});
PostApp.controller('PostController',
function ($scope, $http, loadPage) {
$scope.status = 'Published';
$scope.permition = 'Global';
$scope.order = 'Asscending';
$scope.cultureId = 1;
$scope.ListOfItems = [];
$scope.start = 2;
$scope.skip = 10;
$scope.loaddata = function () {
$scope.ListOfItems = loadPage.loadOtherPage($scope.start, $scope.status, $scope.permition, $scope.order, $scope.cultureId);
};
}
.
);
Ma non impostare la risposta dei servizi di caroPage.loadOtherPage in $ scope.Listofitems Vible. La risposta è JSON in console del browser:
[{"PId":15,"Id":15,"Status":"انتشار","Permition":"سراسری","PublishedDateEn":"08/19/2013","Title":"xxxxxxxxxxxx","CultureId":1,"Username":"naser","CommentCount":0},{"PId":16,"Id":16,"Status":"انتشار","Permition":"سراسری","PublishedDateEn":"08/19/2013","Title":"yyyyyyyyyyyyyyyyyy","CultureId":1,"Username":"naser","CommentCount":0},{"PId":17,"Id":17,"Status":"انتشار","Permition":"سراسری","PublishedDateEn":"08/21/2013","Title":"zzzzzzzzzzzzzzzz","CultureId":1,"Username":"naser","CommentCount":0}]
.
Final $ scope.ListoFitems è vuoto?
Soluzione
(Modificato: aggiunta di variabili per ulteriore chiarezza)
La funzione loadOtherPage
non restituisce nulla, ecco perché $scope.ListOfItems
è vuoto.Il modo corretto per farlo è qualcosa come:
loadOtherPage: function (page, status, permition, order, cultureId) {
var httpPromise = $http({
url: '/Administrator/Post/PagedIndex',
method: "POST",
data: { ... }
});
return httpPromise;
}
.
Ritorna essenzialmente la promessa che $http
ritorna, torna al chiamante.Il tuo controller dovrebbe diventare:
$scope.loaddata = function () {
var loadPagePromise = loadPage.loadOtherPage( ... );
loadPagePromise.success(function(data) {
$scope.ListOfItems = data;
});
};
. Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow