Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    text
    copied!<p>The first problem was solved by Vineet. Actually the functions $get, $post, $delete and so on were present. Just further down when expanding the log record in the Chrome Batarang environment.</p> <p>My actual problem was that the default query method does not like file extensions at the end such as .json </p> <p>If using file extensions following will happen when not parsing an Id:</p> <ul> <li>/api/user/.json</li> </ul> <p>But we would like to have following to display all users:</p> <ul> <li>/api/user/</li> </ul> <p>So file extensions should not be used. The Content-Type should be negotiated through the header. Then file extensions won't be necessary to determine the Content-Type.</p> <p>I changed my user.service the following way:</p> <pre><code>angular.module('user.services', ['ngResource']). factory('User', function($resource){ return $resource('http://localhost\\:8080/api/user/:userId', {userId: '@id'}, { query: {method: 'GET', headers: [{'Content-Type': 'application/json'}, {'Accept': 'application/json'}]}, get: {method:'GET', headers: [{'Content-Type': 'application/json'}, {'Accept': 'application/json'}]}, update: {method:'PUT', headers: [{'Content-Type': 'application/json'}, {'Accept': 'application/json'}]}, create: {method:'POST', headers: [{'Content-Type': 'application/json'}, {'Accept': 'application/json'}]}, delete: {method:'DELETE', headers: [{'Content-Type': 'application/json'}, {'Accept': 'application/json'}]} }); }) </code></pre> <p>My controller looks as followed:</p> <pre><code>function UserCtrl($scope, $resource, User) { // set edit screen to invisible by default $scope.userModScreenIsVisible = false; // initialize buttons as invisible $scope.updateUserDetailsButtonIsVisible = false; $scope.saveUserDetailsButtonIsVisible = false; // display list with users $scope.getList = function() { User.query( {}, //params function (data) { //success $scope.users = data.data; }, function (data) { //failure console.log("Error occurred while getting list of users"); }); } $scope.getList(); // show edit screen if edit button is clicked $scope.showEditScreen = function(id) { $scope.user = User.get({userId: id}); $scope.updateUserDetailsButtonIsVisible = true; $scope.userModScreenIsVisible = true; } // hide edit screen if close button is clicked $scope.hideEditScreen = function() { $scope.updateUserDetailsButtonIsVisible = false; $scope.saveUserDetailsButtonIsVisible = false; $scope.userModScreenIsVisible = false; } // update a user $scope.updateUserDetails = function() { $scope.user.$update(); for(var i=0;i&lt;$scope.users.length;i++) { if($scope.users[i].id == $scope.user.id) { angular.extend($scope.users[i], $scope.user); break; } } console.log($scope.user); //$scope.user = User.get({userId: $scope.user.id}); $scope.updateUserDetailsButtonIsVisible = false; $scope.userModScreenIsVisible = false; } // show a new user screen $scope.showNewScreen = function() { $scope.user = new User(); $scope.saveUserDetailsButtonIsVisible = true; $scope.userModScreenIsVisible = true; } // save a new user $scope.saveUserDetails = function() { $scope.user.$create(); $scope.users.push($scope.user); $scope.saveUserDetailsButtonIsVisible = false; $scope.userModScreenIsVisible = false; } // delete a user $scope.deleteUser = function(id) { $scope.user = User.get({userId: id}); $scope.user.$delete(); } } </code></pre> <p>The HTML:</p> <pre><code>&lt;div id="user_list" class="listview_list"&gt; &lt;div id="user_row" class="listview_row" ng-repeat="u in users"&gt; &lt;div id="user_username" class="listview_column"&gt;&lt;span class="listview_fat"&gt;{{u.username}}&lt;/span&gt;&lt;/div&gt; &lt;div id="user_firstname" class="listview_column"&gt;{{u.firstName}}&lt;/div&gt; &lt;div id="user_lastname" class="listview_column"&gt;{{u.lastName}}&lt;/div&gt; &lt;button class="listview_row_button" ng-click="deleteUser(u.id)"&gt;Delete&lt;/button&gt; &lt;button class="listview_row_button" ng-click="showEditScreen(u.id)"&gt;Edit&lt;/button&gt; &lt;/div&gt; &lt;/div&gt; &lt;div id="user_new" class="new_user"&gt; &lt;button class="new_user_button" ng-click="showNewScreen()"&gt;Add user&lt;/button&gt; &lt;/div&gt; &lt;div id="user_mod" class="mod_form" ng-show="userModScreenIsVisible"&gt; &lt;form name="mod_user"&gt; &lt;label&gt;Username&lt;/label&gt;&lt;br/&gt; &lt;input name="username" ng-model="user.username"/&gt;&lt;br/&gt; &lt;label&gt;Firstname&lt;/label&gt;&lt;br/&gt; &lt;input name="firstName" ng-model="user.firstName"/&gt;&lt;br/&gt; &lt;label&gt;Lastname&lt;/label&gt;&lt;br/&gt; &lt;input name="lastName" ng-model="user.lastName"/&gt;&lt;br/&gt; &lt;button class="button" ng-click="hideEditScreen()"&gt;Close&lt;/button&gt; &lt;button class="button" ng-click="updateUserDetails()" ng-show="updateUserDetailsButtonIsVisible"&gt;Update&lt;/button&gt; &lt;button class="button" ng-click="saveUserDetails()" ng-show="saveUserDetailsButtonIsVisible"&gt;Save&lt;/button&gt; &lt;/form&gt; &lt;/div&gt; </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload