2014-08-27 105 views
0

我是新来的角js。我必须使用java中的其他调用。我已经举了一个与angularjs,java rest有关的例子。角js不等休息响应

看到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' } 
    }) 
}); 

用户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> 

问: 我正在休息呼叫服务器时,它是发送响应。 当我打开index.html它显示在页面上。当我单击编辑(更新)或删除按钮或创建新用户按钮时,用户详细信息将保存在数据库中,但更改后的数据不会显示在表上。

发生这种情况是因为在编辑(更新),删除和创建新用户之后,角码不会等待来自REST调用的响应。它立即调用$ location.path('/ user-list');所以旧数据显示在表格中。

请帮帮我。

+0

阅读$资源的文档。特别是“返回”部分。 https://docs.angularjs.org/api/ngResource/service/$resource – 2014-08-27 12:27:53

+0

我是否需要为控制器中的所有其他调用添加成功响应。 – 2014-08-27 13:27:45

回答

0

我已经添加成功回调的所有方法更新,创建,删除作为

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