Как получить один объект по значению в AngularJS Factory

0

Как получить один объект из массива полетов? Я сначала вызываю функцию getFlights() в одном представлении, а затем я хочу использовать getFlight (flightId) в другом представлении при переходе на страницу для конкретного полета.

Однако, когда я вызываю getFlight (flightId), он не содержит данных.

angular.module('myApp.factories', []).
    factory('flightFactory', function ($http) {

        var flights = {};

        return {
            getFlights: function () {
                return $http.get('app/data/flights.json').then(function (response) {
                    flights = response;
                    return flights;
                });
            },
            getFlight: function (id) {

                for (var i = 0; i < flights.length; i++) {
                    if (flights[i].flightId == id) {
                        return flights[i];
                    }
                }
                return null;
            }
        };

    });

Вот как я получаю все полеты в первом контроллере

flightFactory.getFlights().then(function(response) {
              $scope.flights = response.data;
});

Вот как я пытался получить один рейс во втором контроллере

$scope.singleflight = flightFactory.getFlight($routeParams.flightID);

Вот содержимое файла JSON

[
{
    "date": "2016-02-18T00:19:11-08:00",
    "numberOfSeats": 30,
    "totalPrice": 610,
    "flightId": "PR6674",
    "travelTime": 422,
    "destination": "South Sudan",
    "origin": "Copenhagen"
},
{
    "date": "2016-11-07T16:35:45-08:00",
    "numberOfSeats": 87,
    "totalPrice": 405,
    "flightId": "ZN4890",
    "travelTime": 196,
    "destination": "Rwanda",
    "origin": "Copenhagen"
},
{
    "date": "2016-07-11T18:05:32-07:00",
    "numberOfSeats": 36,
    "totalPrice": 646,
    "flightId": "AT1096",
    "travelTime": 399,
    "destination": "Equatorial Guinea",
    "origin": "Copenhagen"
}
]

Помощь будет очень признательна!

Теги:
http-get
factory

2 ответа

1
Лучший ответ

@Jeffery Yu работает, но он предоставляет массив полетов.

angular.module('myApp.factories', []).
    factory('flightFactory', function ($http) {

        var flights = {};
        var _this = this;
        return {
            getFlights: function () {
                return $http.get('app/data/flights.json').then(function (response) {
                    _this.flights = response;
                    return _this.flights;
                });
            },
            getFlight: function (id) {
                var flights = _this.flights;
                for (var i = 0; i < flights.length; i++) {
                    if (flights[i].flightId == id) {
                        return flights[i];
                    }
                }
                return null;
            }
        };

    });

это скроет массив рейсов от пользователя (без прямого доступа). Это то, о чем говорит @Аник Ислам Абхи.

  • 0
    Благодарю. Первая функция работает нормально, но функция getFlight () выдает ошибку «Невозможно прочитать свойство« длина »неопределенного», который представляет собой flight.length в цикле for.
  • 0
    Я добавил var перед «полётами» во второй функции. Я думаю, что оставляя это, вызывает проблему. Можно ли создать простой анализ ваших представлений, чтобы мы могли помочь с отладкой?
Показать ещё 5 комментариев
0
angular.module('myApp.factories', []).factory('flightFactory', function ($http) {

    return {
        flights:{},
        getFlights: function () {
            return $http.get('app/data/flights.json').then(function (response) {
                this.flights = response;
                return this.flights;
            });
        },
        getFlight: function (id) {

            for (var i = 0; i < flights.length; i++) {
                if (this.flights[i].flightId == id) {
                    return this.flights[i];
                }
            }
            return null;
        }
    };

});
  • 1
    Лучше передать это в начале метода в переменную, чем работать с этой переменной. это варьируется от места к месту
  • 0
    Та же ошибка здесь. "TypeError: Невозможно установить свойство 'flight" из undefined at factories.js: 11 ", что означает" this.flights = response; "

Ещё вопросы

Сообщество Overcoder
Наверх
Меню