Click here to Skip to main content
15,867,141 members
Articles / Web Development / HTML

AngularJS and REST API: Part 3

Rate me:
Please Sign up or sign in to vote.
5.00/5 (1 vote)
27 Apr 2018CPOL4 min read 11.3K   66   5   2
AngularJS and REST API Tutorial: Part 3

AngularJS and REST API Part 3

Introduction

In AngularJS and REST API, Part 2 I created a database table of airports and demonstrated the AngularJS md-autocomplete directive which displays a drop-down of all matches to a query of airport names. In this Part 3, I will demonstrate the md-tab and md-list-item directives by fetching all the airports that are within a specified rectangle and displaying them in two AngularJS tabs, the first tab containing a list of the airports and the second tab containing a map (the map is shown in the screenshot at the beginning of this article - note the word MAP in uppercase and the red underline indicating it is the selected tab).

Using the Code

Download the zip file and extract it. It consists of the following files: AirportLocaterApproach3.html, ListController.js, and AirportController.cs. There are three tasks you need to do before you can build the project. First, replace AirportController.cs in the project you downloaded from AngularJS and REST API, Part 2 with this updated version. Secondly, copy AirportLocaterApproach3.html to the AngularJS_REST_API_AirportLocator directory, and copy ListController.js to the AngularJS_REST_API_AirportLocator\scripts directory. Open the AirportsAPI project with Visual Studio. Clean the solution, then build it by pressing F6; the project should build successfully with no errors. And thirdly, as with Part 2, you will need to change 'YOUR CREDENTIALS' in ListController.js to your Bing credentials. And as described in Part 2, remember to change the AirportEntities connection string in Web.config to point to your database by setting [YOUR_SERVER_NAME] and [YOUR_DATABASE_NAME] the name of your server and database, respectively.

API

There are two new methods in AirportController.cs that accomplish the task of fetching all the airports from the database that fall within a rectangle. Note that both methods have the same name, AirportsByRect, but different signatures. I'll describe the difference between them below. Note that they both call a method called GetAirportsByRect to do the actual work of fetching the data from the database.

C#
[Route("api/AirportsByRect/{northLatitude}/{westLongitude}/{southLatitude}/{eastLongitude}")]
[HttpGet]
public IEnumerable<Airport> AirportsByRect
  (decimal northLatitude, decimal westLongitude, decimal southLatitude, decimal eastLongitude)
{
	IEnumerable<Airport> airports = GetAirportsByRect
            (northLatitude, westLongitude, southLatitude, eastLongitude);
	return airports;
}
C#
[Route("api/AirportsByRect/{values}")]
[HttpGet]
public IEnumerable<Airport> AirportsByRect([FromUri] GeoRectangle location)
{
	IEnumerable<Airport> airports = GetAirportsByRect(location.NorthLatitude, 
               location.WestLongitude, location.SouthLatitude, location.EastLongitude);
	return airports;
}

When the AirportsAPI project is running, you can execute the APIs described above in either of two ways from a DOS command prompt using the curl utility:

curl -X GET http://localhost:55213/api/AirportsByRect/34.4/-119.3/33.7/-117.9/

or:

curl -X GET http://localhost:55213/api/AirportsByRect/values/?
NorthLatitude=34.4^&WestLongitude=-119.3^&SouthLatitude=33.7^&EastLongitude=-117.9

Note that the first way uses the route template describing the URI pattern to match, and second way uses a query string. In the query string, we escaped the ampersand with a caret. Both of these return all of the airports within the rectangle as a JSON string.

You can also use Postman for constructing requests and reading responses; below is a screen shot showing the returned JSON using Postman:

AngularJS and REST API Part 3

Using md-tab and md-list

The new AirportLocaterApproach3.html contains a form that you use to enter the latitudes and longitudes describing the rectangle of interest. (Recall from Part 2 that the airports in the database table are on the West Coast of the USA). Clicking the "Get Airports" button calls the frmGetLatLonRectangle method in the new ListController.js file, which in turn calls the first API described above to fetch the airports within the specified rectangle. Note the AngularJS ng-submit directive in the html: ng-submit="getLatLonRectangle(frmGetLatLonRectangle)"

In the html file, beginning with the md-content directive, there are AngularJS md-tab directives which creates two tabs, the first containing an md-list directive and the second containing the Bing map. The md-list makes use of the ng-repeat directive discussed in Part 1 and Part 2. The screen shot at the beginning of this article shows the map tab displayed, and the screen shot below shows the list of airports displayed by the Airports tab.

AngularJS and REST API

In the list above, you can click on the "MORE INFO" button to display an Infobox with more information (see the doSecondaryAction method in ListController.js) as shown in the following screenshot:

AngularJS and REST API

When the map tab is displayed, a rectangle created by using the Polygon class is shown around the area of interest. An airport marker for each airport in the rectangle will be shown with its IATA code. Clicking on an airport marker will display the same information as the "MORE INFO" infobox above. You can click anywhere on the map to display a marker, then drag it using the DragEnd method in ListController.js to determine the distance (in miles) between it and where you first clicked.

Version 2.0.0.0

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Software Developer (Senior)
United States United States
Chuck Peasley is a developer in Orange County, CA

Comments and Discussions

 
QuestionWhere is Zip file Pin
hestol1-May-18 3:26
hestol1-May-18 3:26 
AnswerRe: Where is Zip file Pin
charles9221-May-18 10:06
charles9221-May-18 10:06 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.