Skip to main content

AngularJS

Basics

  • AngularJS: JavaScript MVC framework, version 1.x (not Angular 2+)
  • Key Concepts: Modules, Controllers, Directives, Services, Data Binding, Dependency Injection

Setup

<!-- Include AngularJS from CDN -->
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.8.2/angular.min.js"></script>

<!-- App Declaration -->
<html ng-app="myApp"></html>

Module

var app = angular.module("myApp", []);

Controller

app.controller("MainCtrl", function ($scope) {
$scope.greeting = "Hello, AngularJS!";
});
<div ng-controller="MainCtrl">{{ greeting }}</div>

Data Binding

  • Interpolation: {{ expression }}
  • ng-model: Two-way binding
<input ng-model="name" />
<p>Hello {{ name }}</p>

Directives

  • Built-in: ng-app, ng-model, ng-repeat, ng-if, ng-show, ng-hide, ng-click, ng-submit, ng-class
  • Custom Directives:
app.directive("myDirective", function () {
return {
template: "<div>Custom Directive!</div>",
};
});

Filters

{{ 1234.5678 | number:2 }}
<!-- 1,234.57 -->
{{ "hello" | uppercase }}
<!-- HELLO -->
{{ "hello" | lowercase }}
<!-- hello -->
{{ dateObj | date:'yyyy-MM-dd' }}

Common filters: currency, date, json, limitTo, orderBy


Services

  • Built-in: $http, $timeout, $interval, $location, $window
  • Custom:
app.service("myService", function () {
this.sayHello = function () {
return "Hello!";
};
});

Inject service:

app.controller("Ctrl", function ($scope, myService) {
$scope.msg = myService.sayHello();
});

Dependency Injection

  • Inject dependencies via function parameters.
app.controller("Ctrl", [
"$scope",
"$http",
function ($scope, $http) {
// ...
},
]);

Routing (ngRoute)

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.8.2/angular-route.js"></script>
app.config(function ($routeProvider) {
$routeProvider
.when("/home", {
templateUrl: "home.html",
controller: "HomeCtrl",
})
.otherwise({ redirectTo: "/home" });
});
<div ng-view></div>

$http Service (AJAX)

$http.get("/api/items").then(function (response) {
$scope.items = response.data;
});
$http.post("/api/add", { name: "Item" }).then(function (response) {
// handle response
});

Forms & Validation

<form name="myForm">
<input ng-model="user.email" required />
<span ng-show="myForm.email.$error.required">Required!</span>
</form>

Events

<button ng-click="doSomething()">Click Me</button>
$scope.doSomething = function () {
alert("Clicked!");
};

ng-repeat

<ul>
<li ng-repeat="item in items">{{ item.name }}</li>
</ul>

Scope Hierarchy

  • $scope: Each controller has its own scope
  • $rootScope: Shared across app

Custom Filters

app.filter("reverse", function () {
return function (input) {
return input.split("").reverse().join("");
};
});
{{ 'hello' | reverse }}
<!-- olleh -->

Built-in Services

  • $http, $q (promises), $timeout, $interval, $filter, $location, $window, $rootScope

Promises

$http.get("/api/data").then(
function (response) {
$scope.data = response.data;
},
function (error) {
// error handling
}
);

Animations (ngAnimate)

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.8.2/angular-animate.js"></script>

Useful CLI Commands (for AngularJS projects)

  • No official CLI, but use bower, npm, or manual file management.

Best Practices

  • Use controllerAs syntax for clarity
  • Minimize use of $scope (prefer this)
  • Organize code by modules
  • Prefer one-way data flow where possible

Debugging

  • Use browser DevTools
  • Use ng-inspector browser extension

Migration

  • AngularJS is legacy (Angular 2+ is recommended for new projects). Migration tools: Angular Upgrade Guide

Tip: Always separate concerns (controllers for logic, views for UI, services for data/communication).


Reference