AngularJS is MVW or MV* or MVVM framework to develop large scale enterprise applications. AngularJS is a buzz word for modern web developers and some business specifically hire AngularJS developers.
It has made the front-end web development easier than ever with loads of cool features.
What does MVW means?
MVW - Model View Whatever. "Whatever" can thought as "Controller" in MVC, but in AngularJS this does mean that,
Whatever = Watch and Digest Loop in AngularJS
Here are some good resources to learn more about Watch and Digest Loop:
- http://tutorials.jenkov.com/angularjs/watch-digest-apply.html
- https://docs.angularjs.org/api/ng/type/$rootScope.Scope
Benefits of SPAs
We can move around the web site without reloading it, just like our old school standalone desktop apps. AngularJS uses the hash or the pound symbol (#) to build up SPAs.
Let's look how we can build Single Page Application using AngularJS
Project Directory
angularmain.js
var firstApp = angular.module('firstApp', ['ngRoute']);
//route configurations
firstApp.config(function ($routeProvider) {
$routeProvider
.when('/', {
templateUrl: 'webpages/home.html',
controller: 'homeController',
})
.when('/about', {
templateUrl: 'webpages/about.html',
controller: 'aboutController',
});
});
// controllers
firstApp.controller('homeController', ['$scope', function ($scope) {
$scope.name = 'From Home Controller';
}]);
firstApp.controller('aboutController', ['$scope', function ($scope) {
$scope.name = 'From About Controller';
}]);
firstApp.controller('mainController', ['$scope', '$location', function ($scope, $location) {
// sets the active style for the navbar elements
$scope.isActive = function (viewLocation) {
return viewLocation === $location.path();
};
}]);
Angular module is a where angular is initialized. Route Configurations enables us to implement SPAs where we are specifying the url, templateUrl - physical location of the webpage for the url, and it's associated controller.
In our example, "/" refers to the home or the index page which is the url, 'webpages/home.html' the home.html is located inside of webpages folder and "homeController" is it's controller responsible for it.
The scope object is only visible to it's respective controller. Ex: $scope.name in homeController and aboutController are different.
template.html
<!DOCTYPE html>
<html lang="en" ng-app="firstApp">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
<title>AngularJS and SPAs</title>
<!-- Bootstrap -->
<link href="css/bootstrap.min.css" rel="stylesheet">
<!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
<!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
<![endif]-->
</head>
<body>
<nav class="navbar navbar-default">
<div class="container-fluid">
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#app1" aria-expanded="false">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="#/">
<span>AngularJS and SPAs</span>
</a>
</div>
<div class="collapse navbar-collapse" id="app1" ng-controller="mainController">
<ul class="nav navbar-nav navbar-left">
<li ng-class="{ active: isActive('/')}"><a href="#/">Home</a></li>
<li ng-class="{ active: isActive('/about')}"><a href="#/about">About</a></li>
</ul>
</div>
</div>
</nav>
<div class="container" ng-controller="homeController">
<div class="row">
<div ng-view></div>
</div>
</div>
<!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<!-- Include all compiled plugins (below), or include individual files as needed -->
<script src="js/bootstrap.min.js"></script>
<!-- AngularJS Scripts -->
<script src="//code.angularjs.org/1.4.7/angular.min.js"></script>
<script src="//code.angularjs.org/1.4.7/angular-route.min.js"></script>
<!-- External JS -->
<script src="js/angularmain.js"></script>
</body>
</html>- ng-app - Specifies the angular module
- ng-controller - the controller for the index page and what page of the page will it control
- ng-view - This takes the view from the angular route configurations
home.html
<div class="form-group"> <label for="inputBox">Text from Controller </label> <input type="text" class="form-control" id="inputBox" ng-model="name"> </div>
about.html
<div class="form-group">
<label for="inputBox">Text from Controller </label>
<input type="text" class="form-control" id="inputBox" ng-model="name">
</div>







