Jon "Greg"ory Rothlander Ответов: 0

Возникли проблемы с простым примером angularjs


Я новичок в AngularJS и пытаюсь заменить некоторый AJAX-код для HTML-сайта, который я использую для тестирования сервисов Web API. Поэтому я проработал несколько примеров AngularJS, чтобы получить представление о том, как все работает. Пока все хорошо, но я не могу получить вызовы к моим сервисам web api для работы в AngularJS. Я уверен, что здесь мне не хватает чего-то простого, но так как я новичок в этом деле, я не могу этого видеть. Поэтому я надеюсь, что кто-то сможет указать мне правильное направление.

Проблема, по-видимому, заключается в том, что в моем контроллере загрузка или инициализация классов обслуживания, по-видимому, вызывает у меня проблемы. Если я удалю классы обслуживания и просто оставлю контроллер, HTML-страница будет отображаться правильно. Но если я включаю их, поля AngluarJS {{}} отображаются с угловыми скобками, показанными в виде текста, поэтому Angular не обрабатывает их. Но если я удалю классы обслуживания, Angular отобразит поля так, как ожидалось... тогда, конечно, класс обслуживания не будет выполнен.

Я получаю аналогичные результаты, помещая вызов $http в контроллер и удаляя службы, но тогда веб-api никогда не вызывается. Так что я не знаю, в чем дело.

Моя цель-просто получить рабочий пример с использованием моих веб-api-сервисов. Так что на данный момент я обслуживаю классы. Мне просто нужно заставить его работать, чтобы мне было с чего начать.

Любые предложения или рекомендации очень ценятся.

С уважением,
Джон

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

Вот моя HTML-страница.
<!DOCTYPE html>
<html ng-app="myAngularApplication">
<head>
    <title>Sample Angular Application</title>
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.5/angular.min.js"></script>
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.5/angular-resource.js"></script>    
    <script src="app/app.js"></script>
    <script src="app/loan/loanController.js"></script>
    <link href="css/bootstrap.min.css" rel="stylesheet">
    <link href="css/style.css" rel="stylesheet">
</head>
<body ng-controller="loanController" class="panel-body">
    <div class="text-primary">
        <div class="panel panel-default">
            <div class="panel-body">
                <table>
                    <tr>
                        <td colspan="3" class="modal-title" style="font-weight: bold;">Encompass Pricing Engine Web API Service</td>
                    </tr>
                    <tr>
                        <td class="control-label">Loan Number</td>
                        <td>
                            <input type="text" ng-model="loanNumber" value="160000223" class="form-control" style="width: 150px; height: 32px;" />
                        </td>
                        <td>
                            <input type="button" ng-click="fetchLoanFromServer()" value="Get Loan" class="btn-sm btn-success">
                        </td>
                    </tr>
                </table>
            </div>
        </div>

        <div class="panel panel-default">
            <div class="panel-body">
                <table>
                    <tr>
                        <td colspan="3" class="modal-title" style="font-weight: bold;">Pricing Engine WS</td>
                    </tr>
                    <tr>
                        <td class="control-label">Loan Number</td>
                        <td>
                            <input type="text" ng-model="loanNumber" value="160000223" class="form-control" style="width: 150px; height: 32px;" />
                        </td>
                        <td>
                            <input type="button" ng-click="fetchLoan()" value="Get Loan" class="btn-sm btn-success">
                        </td>
                    </tr>
                </table>
            </div>
        </div>
        <p>
            {{message}}
        </p>
        <p>
            {{loan}}
        </p>
        <p>
            {{error}}
        </p>
    </div>
</body>
</html>


Вот файлы JavaScript.

app.js
(function(){
    myModule = angular.module("myAngularApplication", []);
}());


loanController.js
(function () {

    var loanController = function ($scope, $filter, localLoanService, remoteLoanService) {

        $scope.message = "Loan returned";
        $scope.error = "";

        $scope.loan = [];

        $scope.fetchLoan = function () {
            $scope.loan = localLoanService.loan;
        }

        $scope.fetchLoanFromServer = function () {
            remoteLoanService.fetchLoan($scope.loanNumber)
            .success(function (data, status, headers, config) {
                $scope.loan = data;
            })
            .error(function (data, status, headers, config) {
                $scope.loan = [];
                $scope.error = "Failed to retrieved loan from server";
            });
        };

    }
    
    angular.module("myAngularApplication").controller("loanController", ["$scope", "$filter", "localLoanService", "remoteLoanService", loanController]);
}());


localLoanService.js -это просто возвращает список книг из образца, с которым я работал.
(function () {

    var localLoanService = function () {
        var loan = [
            { ID: 1, BookName: "Test Books 1", AuthorName: "Test Author 1", ISBN: "TEST1" },
            { ID: 2, BookName: "Test Books 2", AuthorName: "Test Author 2", ISBN: "TEST2" },
            { ID: 3, BookName: "Test Books 3", AuthorName: "Test Author 3", ISBN: "TEST3" },
            { ID: 4, BookName: "Test Books 4", AuthorName: "Test Author 4", ISBN: "TEST4" },
            { ID: 5, BookName: "Test Books 5", AuthorName: "Test Author 5", ISBN: "TEST5" }
        ];

        return {
            loan: loan
        };
    }

    angular.module("myAngularApplication").factory("localLoanService", [localLoanService]);
}());


remoteLoanService.js - это вызов моего веб-api-сервиса. Я переписал это дюжиной различных способов, используя post и get, и начал с вызова $http в самом контроллере. Но позже я нашел лучший пример, где он разделил его на класс обслуживания, который я скопировал здесь. Я удалил имя сервера, чтобы опубликовать это в интернете, и служба веб-api настроена на заданный порт, что объясняет нечетный url-адрес для вызова. Сервис работает в производстве уже больше года, так что я думаю, что все в порядке.

(function () {

    var remoteLoanService = function ($http, loanNumber) {
        var fetchLoan = function () {
            return $http({
                            url: "http://abc123:9810/api/Loan/GetLoan/",
                            method: "GET",
                            params: {id: angular.toJSON(loanNumber, false)}
                        });
        };

        return {
            fetchloan: fetchLoan
        };
    }

    angular.module("myAngularApplication").factory("remoteLoanService", ["$http", remoteLoanService]);
}());

0 Ответов