Получение данных с сервера с обещанием, используя angularjs

0

Как получить таблицу из db с обещанием. Я создал сервис и http-вызов с обещанием. Я проверил консоль, и URL-адрес не вызван. Я не уверен, что это восьмой способ создания сервиса.

<!doctype html>
<html lang="en" ng-app="myApp">
    <head>
        <meta charset="utf-8">
        <base href="/">
        <title>The Single Page Blogger</title>
        <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular-resource.min.js"></script>
        <link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css">
        <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"></script>
        <script data-require="ui-bootstrap@*" data-semver="0.12.1" src="http://angular-ui.github.io/bootstrap/ui-bootstrap-tpls-0.12.1.min.js"></script>
        <script src="<%=request.getContextPath()%>/js/module.js"></script>
        <link rel="stylesheet" href="<%=request.getContextPath()%>/style2.css" />
        <script>

            app.controller('tableController', function ($log, $scope, tableService)
            {
                $scope.customerTable = [];
                var promise = tableService.fetchTable();
                promise.then(function (data)
                {
                    console.log("Your name is: " + data);
                    $scope.customerTable = data;
                });
            });

            app.factory('tableService', function ($http)
            {
                return
                {
                    fetchTable: function()
                    {
                        return $http.get('<%=request.getContextPath()%>/GetTable.do');
                    }
                }
            });

        </script>
    </head>
    <body>
        <div class="container" id="main"><br/><br/>
            Search: <input type="text" ng-model="search" placeholder="Search">
            <div ng-controller="tableController">
                <table class="table table-striped table-hover table-bordered">
                    <tr>
                        <th style="font-size: 13.3px">Card number</th>
                        <th style="font-size: 13.3px">First name</th>
                        <th style="font-size: 13.3px">Opening balance</th>
                        <th style="font-size: 13.3px">Withdrawal</th>
                        <th style="font-size: 13.3px">Deposit</th>
                        <th style="font-size: 13.3px">Closing balance</th>
                        <th style="font-size: 13.3px">Tx date</th>
                        <th style="font-size: 13.3px">Usage type</th>
                    </tr>
                    <tr ng-repeat="data in filteredTodos| filter: search">
                        <td>{{data.CARD_NUMBER}}</td>
                        <td>{{data.FIRST_NAME}}</td>
                        <td>{{data.OPENING_BALANCE}}</td>
                        <td>{{data.WITHDRAWAL}}</td>
                        <td>{{data.DEPOSIT}}</td>
                        <td>{{data.CLOSING_BAL}}</td>
                        <td>{{data.TXDATE}}</td>
                        <td>{{data.USAGE_TYPE}}</td>
                    </tr>
                </table>
                <pagination 
                    ng-model="currentPage"
                    total-items="customerTable.length"
                    max-size="maxSize"  
                    boundary-links="true">
                </pagination>
                <br/><br/><br>
                <button class="form-control btn btn-success" type="submit" ng-click="fetchTable()">Load Table Data</button>
            </div>
        </div>
    </body>
</html>
Теги:

2 ответа

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

Ваша услуга дает обещание, но не доставляет, попробуйте добавить службу $ q в ваш:

app.factory('tableService', function ($http, $q) {
    return {
        fetchTable: function() {
            // the $http API is based on the deferred/promise APIs exposed by the $q service
            // so it returns a promise for us by default
            return $http.get('<%=request.getContextPath()%>/GetTable.do')
                .then(function(response) {
                    if (typeof response.data === 'object') {
                        return response.data;
                    } else {
                        // invalid response
                        return $q.reject(response.data);
                    }
                }, function(response) {
                    // something went wrong
                    return $q.reject(response.data);
                });
        }
    };
});

app.controller('tableController', function ($log, $scope, tableService)
{
    $scope.customerTable = [];

    $scope.getData = function() {
        var promise = tableService.fetchTable();

        promise.then(function (data)
        {
            console.log("Your name is: " + data);

            $scope.customerTable = data;
        });
    }
});

<div ng-controller="tableController" ng-init="getData()">
  • 0
    Там нет контроллера? Как я могу назвать это в HTML? просто вызвать fetchTable() нажатием кнопки?
  • 0
    Попробовал это: <button type="submit" ng-click="fetchTable()">Load Table Data</button> все еще не работает
Показать ещё 11 комментариев
1
app.controller('tableController', function ($log, $scope, tableService)
    {
        $scope.customerTable = [];
        var promise = tableService.fetchTable();
        promise.then(function (data)
        {
            console.log("Your name is: " + data);

            $scope.customerTable = data;
        });
    });

Это должно сделать это. Вы возвращали данные перед установкой $scope.customerTable. На самом деле, почему вы даже возвращаете data? Вы не можете вернуть что-то из обратного вызова. Я также удалил эту строку.

  • 0
    http URL не вызывается. Я изменил свой код, как вы сказали. Я правильно написал сервис?
  • 0
    @kittu Можете ли вы поставить консольный журнал перед возвратом $ http.get? просто чтобы убедиться, что сама функция работает правильно. Попробуйте добавить .catch после вашего then () и зарегистрируйте ошибку, чтобы увидеть, говорит ли она что-нибудь.
Показать ещё 3 комментария

Ещё вопросы

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