In this article, we'll create our first angularjs application. And hayy!!! its not the traditional Hello World application. :P
We are gonna try to build an app which can add, delete members and filter members based on a text. Its very basic, I know.. but its good enough to start with.
Lets call our application as FilterApp. We will be using bootstrap CSS for styling purpose.
For small applications (especially for learning purpose), I always follow the following app skeleton. Here we will be following the same structure. Feel free to use it in your way.
The directory structure will look as
The app root folder is FilterApp. It contains three subfolders
See that MainCtrl controller is attached to the <body> element. Hence all the properties and behaviour under this scope will be available within the <body>. As of now, we haven't defined anything under MainCtrl (see controllers.js). To make our app more flexible and modular, we have used FilterCtrl within the main controller. A simple header and footer is created using the navbar component provided by bootstrap. Lets divide the code and analyse each part. First of all, lets see the form to add a member.
The app root folder is FilterApp. It contains three subfolders
- css : Contains bootstrap css file and styles.css file where we can add our custom styles if needed.
- fonts : Contains the fonts for bootstrap.
- js : Contains all the javascript files. The libraries are included in a separate lib folder within js.
- An html file to describe the layout, FilterApp.html in the root (FilterApp) folder.
- app.js and controllers.js inside js folder.
<!doctype html> <html> <head> <title> Filter a list </title> <meta name="viewport" content="width=device-width, initial-scale=1" /> <link rel="shortcut icon" href="favicon.ico" type="image/x-icon" /> </head> <body> </body> </html>Since bootstrap css is our CSS framework, we need those too. Include the following lines of code within the <head> tag.
<link rel="stylesheet" href="css/bootstrap.min.css">Add the below line of code just after closing body </body> tag to include angularjs library.
<script src="js/lib/angular.min.js"></script>OK, now we have to bootstrap our application. ng-app directive is used for this purpose.
Use this directive to auto-bootstrap an AngularJS application. TheIn our app, we are using this inside <html> tag.ngApp
directive designates the root element of the application and is typically placed near the root element of the page - e.g. on the<body>
or<html>
tags. You can have multiple apps within the same page.
<html ng-app="FilterApp">Open app.js and add the following line of code,
var filterApp = angular.module('FilterApp', []);With this line of code, we actually initialize our app and register the modules on which it depends (specified inside square brackets,here none). Now we have to create a controller which will perform all our logic and initialize the $scope object. The
$scope
variable connects your controller and views. It holds all the data that will be used within your template. Anything you add to it will be directly accessible in your views.
Open controllers.js and add the following code
var filterAppControllers = angular.module('filterAppControllers', []); filterAppControllers.controller('MainCtrl', function ($scope) { }); filterAppControllers.controller('FilterCtrl', function ($scope) { $scope.members = ['Google', 'Facebook', 'Microsoft']; $scope.addMember = function () { $scope.members.push($scope.newMember); $scope.newMember = ''; }; $scope.deleteMember = function (item) { var index = $scope.members.indexOf(item); $scope.members.splice(index, 1); }; });Here we have created a module called filterAppControllers and added two controllers MainCtrl and FilterCtrl using .controller method. For FilterCtrl, we have initialised a $scope property named members and added two behaviours addMember and deleteMember to the scope object. Edit the app.js and change it to the following to inject the dependency
var filterApp = angular.module('FilterApp', ['filterAppControllers']);
Now include both app.js and controllers.js in FilterApp.html. For this, add the following line of code after angularjs library inclusion just above closing </html> tag
<script src="js/app.js"></script>
<script src="js/controllers.js"></script>
Next, We attach our controller to the DOM using the ng-controller
directive.
See that MainCtrl controller is attached to the <body> element. Hence all the properties and behaviour under this scope will be available within the <body>. As of now, we haven't defined anything under MainCtrl (see controllers.js). To make our app more flexible and modular, we have used FilterCtrl within the main controller. A simple header and footer is created using the navbar component provided by bootstrap. Lets divide the code and analyse each part. First of all, lets see the form to add a member.
<form class="form-inline text-center" ng-submit="addMember()"> <div class="form-group"> <input type="text" class="form-control input-lg" id="txtMember" required="" placeholder="Enter Member Name" ng-model="newMember" pattern="[a-zA-Z]+" /> </div> <button type="submit" class="btn btn-primary btn-lg">Add member</button> </form>The input textbox is binded to the newMember property on the scope of FilterCtrl controller using
ng-model
directive. It is a two way binding.
Basically, ng-model
directive binds an input
,select
, textarea
(or custom form control) to a property on the scope. The pattern is an HTML5 attribute, which specifies a regular expression that the <input> element's value is checked against. In this case the input can only contain alphabets. On submitting this form, addMember behaviour on the scope of FilterCtrl controller is triggered. This is achieved using ng-submit
directive. This happens only if the form does not contain action
, data-action
, or x-action
attributes. As you can clearly understand from the addMember method, it adds an item to the members array on the scope.
Now let us analyse the table used to display the members.
<table class="table table-striped"> <thead> <tr> <th>Name</th> <th>Delete</th> </tr> </thead> <tbody> <tr ng-repeat="member in members"> <td>{{member}}</td> <td><button class="btn btn-default" ng-click="deleteMember(member)"><span class="glyphicon glyphicon-trash"></span></button></td> </tr> </tbody> </table>The first thing you’ll notice in this template is the use of expressions (“{{“ and “}}”) to return variable values. In AngularJS, expressions allow you to execute some computation in order to return a desired value. Some valid expressions would be:
- {{ 1 + 4 }}
- {{ username }}
ng-repeat
and ng-click
directives. The ng-repeat
directive is one of the most commonly used and serves to define your template scope when looping through collections. In the example above, it replicates a line in the table for each member in members
. The ng-click
directive binds an expression to onclick events. Here it call the deleteMember function on scope of the FilterCtrl controller.
Filtering the members
Adding extra functionality is always fun. So lets add a filtering functionality to our app. This will help us to filter the members list based on a text we feed. For this replace the below line///For filtering view///with the below line of codes
<table class="table table-striped"> <tr> <td><input type="text" class="form-control" ng-model="filterTxt" placeholder="Enter filter text"/></td> </tr> <tr ng-repeat="member in members | filter : filterTxt"> <td>{{member}}</td> </tr> </table>AngularJS filters are used for this purpose. In this code, the data that a user types into the input box (named filterTxt) is immediately available as a filter input in the list repeater (member in members | filter:filterTxt). When changes to the data model cause the repeater's input to change, the repeater efficiently updates the DOM to reflect the current state of the model. So your first angularjs application is ready to test. Always use modern browsers. Hope you enjoy this tutorial. :)
Useful post.As a beginner in angularjs, I got more information from your site and have it explained clearly. Continue sharing more like this.
ReplyDeleteRegards,
Angularjs Training | Angularjs Training in Chennai | Angularjs courses in Chennai
Machine Learning Projects for Final Year machine learning projects for final year
DeleteDeep Learning Projects assist final year students with improving your applied Deep Learning skills rapidly while allowing you to investigate an intriguing point. Furthermore, you can include Deep Learning projects for final year into your portfolio, making it simpler to get a vocation, discover cool profession openings, and Deep Learning Projects for Final Year even arrange a more significant compensation.
Python Training in Chennai Project Centers in Chennai
Hi, Great.. Tutorial is just awesome..It is really helpful for a newbie like me.. I am a regular follower of your blog. Really very informative post you shared here. Kindly keep blogging. If anyone wants to become a Front end developer Angular js Training in india.
ReplyDeleteThanks for this informative blog
ReplyDeleteTop 5 Data science training in chennai
Data science training in chennai
Data science training in velachery
Data science training in OMR
Best Data science training in chennai
Data science training course content
Data science certification in chennai
Data science courses in chennai
Data science training institute in chennai
Data science online course
Data science with python training in chennai
Data science with R training in chennai