RelicV Ответов: 0

В AngularJS фабрика не отвечает динамических данных в контроллер


Это мой заводской сервис, и он извлекает данные из веб-сервиса

var customersFactory = function ($http) {
    var customer = [];
    var getCustomersURL = "http://localhost:50340/Services/CustomerService.asmx/GetCustomers";

    customer.XMLtoJSON = function (data) {
        data = data.replace('<?xml version="1.0" encoding="utf-8"?>', ''); ;
        data = data.replace('<string xmlns="http://tempuri.org/">', '').replace('</string>', '');
        return $.parseJSON(data);
    };

    customer.GetCustomers = function () {
        $http.post(getCustomersURL).success(function (data, status, headers, config) {
            return customer.XMLtoJSON(data);
        }).error(function (ata, status, headers, config) {  });
    };

    return customer;
};

app.factory('customersFactory', customersFactory);


Теперь это используется в моем контроллере

app.controller("CustomersController", function ($scope, customersFactory) {
    var service = [];
    service = customersFactory.GetCustomers();
    $scope.Customers = service;

    if ((typeof (service) != 'undefined') && service.length > 0) {
        service.then(function (result) {
            $scope.Customers = result;
        });
    }
});

Значение услуги всегда неопределенно или пусто. Данные не передаются от фабрики к контроллеру. Я звоню в простой веб-сервис, никаких причудливых API или WCF.

Это были какие-то статические/фиктивные данные, они работали нормально. Контроллер извлекает данные и выводит их на экран.

Что я делаю не так?

Любая помощь очень ценится.

Спасибо

Что я уже пробовал:

Я новичок в AnuglarJS и изо всех сил пытался получить динамическую привязку данных, но если я помещаю некоторые статические/фиктивные данные, это работает.

Итак, где я все испортил? Чего еще не хватает в коде.

Konstantin A. Magg

Привет Реликвия,
насколько я могу судить, ваше фабричное определение выглядит прекрасно.

Как насчет вашей асинхронной реализации GetCustomers? Вы уверены, что вызов http post уже вернулся, когда вы установили `$scope.Клиентов?

Вероятно, точка останова на этой линии могла бы помочь: "верните клиента.XMLtoJSON(данные);`

0 Ответов