Как получить данные из ответа сервиса Angularjs на объект области контроллера - PullRequest
1 голос
/ 10 октября 2019

У меня простое приложение Angularjs 1.7. Все работает нормально, и я могу получать данные из веб-API в службу angularjs. Когда я отлаживаю сервис Angularjs, я вижу, что данные извлекаются из базы данных через Web API. Поэтому я использую сервис внутри контроллера angularjs для извлечения данных в объект видимости. Но я не уверен, почему данные не выбираются в объекте области контроллера. Есть ли что-то, чего мне не хватает, чтобы это исправить.

Service.js

(function () {

    var app = angular.module('myApp');

    app.factory('websiteService', function ($http, $q) {
        var factory = [];
        var deferred = $q.defer();
        var baseURI = 'http://localhost:59029/api';

        factory.getAllStudents = function () {
            $http({
                method: 'GET',
                url: baseURI + '/Website/GetAllStudents'
            }).then(function (response) {
                deferred.resolve(response);
            }, function (error) {
                deferred.reject(error);
            });
            return deferred.promise;
        }

        return factory;
    });
})();

Controller.js

(function () {

    var app = angular.module('myApp');

    app.controller('websiteController', ['$scope', '$http', 'websiteService', '$filter',
        function ($scope, $http, websiteService, $filter) {
            $scope.TestWebsite = "TestWebsite";
            console.log($scope.TestWebsite);

            //GET Students
            websiteService.getAllStudents()
                .then(function (response) {
                    $scope.FetchedAllStudents = response;
                    // NOT ABLE TO FETCH THE DATA HERE
                }, function (error) {
                    // error handling here
                });
        }
    ]);
})();

1 Ответ

1 голос
/ 10 октября 2019

Нет необходимости создавать обещание с $q.defer, поскольку служба $ http уже возвращает обещание:

app.factory('websiteService', function ($http, $q) {
    var factory = [];
    ̶v̶a̶r̶ ̶d̶e̶f̶e̶r̶r̶e̶d̶ ̶=̶ ̶$̶q̶.̶d̶e̶f̶e̶r̶(̶)̶;̶
    var baseURI = 'http://localhost:59029/api';

    factory.getAllStudents = function () {
        return $http({
            method: 'GET',
            url: baseURI + '/Website/GetAllStudents'
        }).then(function (response) {
            return response.data;
        });
    }
    return factory;
});

Для получения дополнительной информации см. Является ли это «Отложенный антипаттерн»?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...