Angularjs 没有等待rest响应

Angularjs 没有等待rest响应,angularjs,rest,Angularjs,Rest,我是新手。我必须处理java中的rest调用。我举了一个与angularjs相关的例子,JavaREST 参见app.js angular.module('ngdemo', ['ngRoute','ngdemo.filters', 'ngdemo.services', 'ngdemo.directives', 'ngdemo.controllers']). config(['$routeProvider', function ($routeProvider) {

我是新手。我必须处理java中的rest调用。我举了一个与angularjs相关的例子,JavaREST

参见app.js

angular.module('ngdemo', ['ngRoute','ngdemo.filters', 'ngdemo.services', 'ngdemo.directives', 'ngdemo.controllers']).
        config(['$routeProvider', function ($routeProvider) {
            $routeProvider.when('/user-list', {templateUrl: 'partials/user-list.html', controller: 'UserListCtrl'});
            $routeProvider.when('/user-detail/:id', {templateUrl: 'partials/user-detail.html', controller: 'UserDetailCtrl'});
            $routeProvider.when('/user-creation', {templateUrl: 'partials/user-creation.html', controller: 'UserCreationCtrl'});
        }]);
controllers.js

'use strict';

/* Controllers */

var app = angular.module('ngdemo.controllers', []);

app.run(function ($rootScope, $templateCache) {
    $rootScope.$on('$viewContentLoaded', function () {
        $templateCache.removeAll();
    });
});


app.controller('UserListCtrl', ['$scope', 'UsersFactory', 'UserFactory', 'DeleteUserFactory', 'UsersSearchFactory', '$location',
    function ($scope, UsersFactory, UserFactory, DeleteUserFactory, UsersSearchFactory, $location) {

        // callback for ng-click 'editUser':
        $scope.editUser = function (userId) {
            $location.path('/user-detail/' + userId);
        };

        $scope.searchUser = function () {
            $scope.users = UsersSearchFactory.search($scope.user);
        };

        // callback for ng-click 'deleteUser':
        $scope.deleteUser = function (user) {
            DeleteUserFactory.delete(user);
            $scope.users = UsersFactory.query({startRow: 0}, {endRow: 75});
        };

        // callback for ng-click 'createUser':
        $scope.createNewUser = function () {
            $location.path('/user-creation');
        };

        $scope.users = UsersFactory.query({startRow: 0}, {endRow: 75});

    }]);

app.controller('UserDetailCtrl', ['$scope', '$routeParams', 'UserFactory', 'UpdateUserFactory', '$location',
    function ($scope, $routeParams, UserFactory, UpdateUserFactory, $location) {

        // callback for ng-click 'updateUser':
        $scope.updateUser = function () {
            UpdateUserFactory.update($scope.user);
            $location.path('/user-list');
        };

        // callback for ng-click 'cancel':
        $scope.cancel = function () {
            $location.path('/user-list');
        };

        $scope.user = UserFactory.show({id: $routeParams.id});
    }]);

app.controller('UserCreationCtrl', ['$scope', 'CreateUserFactory', '$location',
    function ($scope, CreateUserFactory, $location) {

        // callback for ng-click 'createNewUser':
        $scope.createNewUser = function () {
            CreateUserFactory.create($scope.user);
            $location.path('/user-list');
        }
    }]);
services.js

'use strict';

/* Services */

var services = angular.module('ngdemo.services', ['ngResource']);


services.factory('UsersFactory', function ($resource) {
    return $resource('/ngdemo/rest/getUsers/:startRow/:endRow', {}, {
        query: { method: 'GET', isArray: true, params: {startRow: '@startRow', endRow: '@endRow'}  },
        create: { method: 'POST' }
    })
});

services.factory('UsersCountFactory', function ($resource) {
    return $resource('/ngdemo/rest/getUsersCount', {}, {
        count: { method: 'GET'}
    })
});

services.factory('UsersSearchFactory', function ($resource) {
    return $resource('/ngdemo/rest/searchUser', {}, {
        search: { method: 'POST', isArray: true, }
    })
});

services.factory('CreateUserFactory', function ($resource) {
    return $resource('/ngdemo/rest/registerUser', {}, {
        create: { method: 'POST' }
    })
});

services.factory('UpdateUserFactory', function ($resource) {
    return $resource('/ngdemo/rest/updateUser', {}, {
        update: { method: 'POST' }
    })
});

services.factory('DeleteUserFactory', function ($resource) {
    return $resource('/ngdemo/rest/deleteUser', {}, {
        delete: { method: 'POST' }
    })
});


services.factory('UserFactory', function ($resource) {
    return $resource('/ngdemo/rest/findUserById/:id', {}, {
        show: { method: 'GET' }
    })
});
user-list.html

<div class="container">
        <form novalidate="novalidate" class="form-horizontal">
            <div class="control-group">
                <label class="control-label" for="inputFirstName">First name:</label>

                <div class="controls">
                    <input type="text" id="inputFirstName" ng-model="user.firstName" placeholder="First name"/>
                </div>
            </div>

            <div class="form-group">
                <div class="controls">
                    <a ng-click="searchUser()" class="btn btn-primary btn-xs">Search</a>
                </div>
            </div>
        </form>
</div>

<div class="span6">
    <table class="table table-striped table-condensed" >
        <thead>
        <tr>

            <th style="min-width: 80px;"> First Name</th>
            <th style="min-width: 80px;"> Last Name</th>
            <th style="width:20px;">&nbsp;</th>
            <th style="width:20px;">&nbsp;</th>
        </tr>
        </thead>
        <tbody>
        <tr ng-repeat="user in users" > <!--  | orderBy:sort.sortingOrder:sort.reverse" > -->
            <td>{{ user.firstName }}</td>
            <td>{{ user.lastName }}</td>
            <td><a ng-click="editUser(user.userId)" class="btn btn-small btn-primary">edit</a></td>
            <td><a ng-click="deleteUser(user)" class="btn btn-small btn-danger">delete</a></td>
        </tr>
        </tbody>
    </table>
    <a ng-click="createNewUser()" class="btn btn-small">create new user</a>       
</div>
index.html

<!doctype html>
<html lang="en" ng-app="ngdemo">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>ngdemo app</title>
    <link rel="stylesheet" href="css/app.css"/>
    <link rel="stylesheet" href="css/bootstrap/bootstrap-responsive.min.css"/>
    <link rel="stylesheet" href="css/bootstrap/bootstrap.min.css"/>
</head>
<body>
<ul class="menu">
    <li><a href="#/user-list">user-list</a></li>

</ul>

<div ng-view></div>

<!-- JQuery ================================================================ -->
<script src="js/jquery/jquery-2.0.3.js"></script>

<!-- Bootstrap ============================================================= -->
<script src="js/bootstrap/bootstrap.js"></script>

<script src="lib/angular/angular.js"></script>
<script src="lib/angular/angular-resource.js"></script>
<script src="lib/angular/angular-route.js"></script>

<!-- AngularJS App Code ==================================================== -->
<script src="js/app.js"></script>
<script src="js/services.js"></script>
<script src="js/controllers.js"></script>
<script src="js/filters.js"></script>
<script src="js/directives.js"></script>
</body>
</html>
问题: 我正在接到服务器的rest调用,它正在发送响应。 当我打开index.html时,它会在页面上显示输出。当我单击editupdate或delete按钮或create new user按钮时,用户详细信息会保存在数据库中,但更改的数据不会显示在表中

这是因为在编辑更新、删除和创建新用户之后,angular代码没有等待REST调用的响应。它立即调用$location.path'/user list';因此,旧数据显示在表中


请帮助我。

我已经添加了所有方法的成功回调更新、创建和删除

$scope.createNewUser = function () {
            CreateUserFactory.create($scope.user, function(response) {
                $location.path('/user-list');   
            });
        }

阅读$resource的文档。特别是返回部分。我是否需要为控制器中的所有rest调用添加成功响应。