4 - Search for Documents
Reset the workspace to step 4:
git checkout -f step-4
Search
In this step the document list in the app is extended with keyword search functionality.
The Document Collection resource described in step 1 supports keyword search through a _query parameter:
http://localhost:8080/site/api/documents/?_query=breakfast
The response will have the same format as before but will only include documents that contain the keywords in the _query parameter.
Code Changes
DocumentsService
The DocumentsService's getList function is extended with a query parameter which is passed on to the REST resource.
app.js
hippoRestApp.factory('DocumentsService', function($resource, apiPrefix) { return { getList : function(query) { return $resource(apiPrefix + 'documents/', { _query : query }).get(); }, getDocumentById : function(uuid) { return $resource(apiPrefix + 'documents/' + uuid).get(); } } });
DocumentsController
The DocumentsController is extended so that the documents list can be updated any time (e.g. when a search query is submitted by the user) through an update function. A query object (to be bound to a search input box in the view) is passed on to the DocumentsService.
app.js
if (!$routeParams.uuid) { $scope.query = ''; $scope.update = function($scope) { DocumentsService.getList($scope.query).$promise.then(function(response) { $scope.documents = response; }); } $scope.update($scope); $scope.search = function() { $scope.update($scope); } }
View
A search form is added to the documents-list view, consisting of an input field bound to the query object and a button to submit the search query. On form submission the controller's search function is called.
documents-list.html
<h2>Documents</h2> <form ng-submit="search()"> <input type="text" ng-model="query" size="30" placeholder="enter keywords"> <input class="btn-primary" type="submit" value="search"> </form> <ul> <li ng-repeat="document in documents.items"><a href="#/{{document.id}}">{{document.name}}</a></li> </ul>
Summary
In this step a search form was added to the app's document list. Go to step 5 to learn how to add paging to the list.