1. Pengantar AngularJS
AngularJS adalah framework JavaScript open-source yang dikembangkan oleh Google untuk membangun aplikasi web single page (SPA) yang dinamis dan responsif. Dengan AngularJS, Anda dapat mengembangkan aplikasi yang berjalan di browser dengan pengalaman pengguna yang mulus tanpa perlu reload halaman.
Framework ini menggunakan konsep MVC (Model-View-Controller) dan menyediakan fitur seperti two-way data binding, dependency injection, dan modularisasi kode yang memudahkan pengembangan aplikasi web modern.
2. Persiapan Lingkungan Pengembangan
Sebelum mulai membangun aplikasi AngularJS, pastikan Anda sudah menyiapkan lingkungan pengembangan yang tepat:
-
Editor kode seperti Visual Studio Code atau Sublime Text.
-
Browser modern (Chrome, Firefox, Edge) untuk testing.
-
Server lokal sederhana seperti
http-server
dari Node.js atau Live Server extension di VSCode.
-
File AngularJS yang bisa diambil dari CDN atau diunduh langsung.
Contoh menyisipkan AngularJS dari CDN:
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.8.2/angular.min.js"></script>
3. Struktur Dasar Aplikasi AngularJS
Struktur aplikasi AngularJS biasanya terdiri dari file HTML utama yang menginisialisasi aplikasi, file JavaScript untuk modul dan controller, serta file CSS untuk styling.
Contoh struktur sederhana:
-
index.html
- file utama aplikasi
-
app.js
- definisi modul dan controller
-
style.css
- styling aplikasi
Contoh
index.html
minimal:
<!DOCTYPE html>
<html ng-app="myApp">
<head>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.8.2/angular.min.js"></script>
<script src="app.js"></script>
</head>
<body>
<div ng-controller="MainController">
<h1>Halo, {{ nama }}!</h1>
</div>
</body>
</html>
Contoh
app.js
:
angular.module('myApp', [])
.controller('MainController', ['$scope', function($scope) {
$scope.nama = 'Dunia AngularJS';
}]);
4. Data Binding dan Direktif
AngularJS menggunakan
two-way data binding
yang memungkinkan data di model dan tampilan selalu sinkron secara otomatis. Direktif adalah atribut khusus yang memperluas HTML dengan fitur AngularJS.
Contoh data binding:
<input type="text" ng-model="nama">
<p>Halo, {{ nama }}!</p>
Beberapa direktif penting:
-
ng-model
- mengikat input ke model
-
ng-repeat
- perulangan elemen
-
ng-if
- kondisi tampilan
-
ng-click
- event klik
5. Membuat Controller dan Scope
Controller adalah fungsi JavaScript yang mengontrol data dan logika aplikasi.
$scope
adalah objek yang menghubungkan controller dengan tampilan.
Contoh controller sederhana:
angular.module('myApp', [])
.controller('TodoController', ['$scope', function($scope) {
$scope.todos = [
{ text: 'Belajar AngularJS', done: false },
{ text: 'Membuat aplikasi SPA', done: false }
];
$scope.tambahTodo = function() {
if ($scope.todoText) {
$scope.todos.push({ text: $scope.todoText, done: false });
$scope.todoText = '';
}
};
$scope.hapusSelesai = function() {
$scope.todos = $scope.todos.filter(todo => !todo.done);
};
}]);
Contoh HTML untuk controller di atas:
<div ng-controller="TodoController">
<input type="text" ng-model="todoText" placeholder="Tambah tugas">
<button ng-click="tambahTodo()">Tambah</button>
<ul>
<li ng-repeat="todo in todos">
<input type="checkbox" ng-model="todo.done"> {{ todo.text }}
</li>
</ul>
<button ng-click="hapusSelesai()">Hapus yang selesai</button>
</div>
6. Routing dan Single Page Application
AngularJS menyediakan modul
ngRoute
untuk mengatur routing dan navigasi antar halaman dalam SPA tanpa reload penuh.
Langkah menggunakan routing:
-
Tambahkan
angular-route.js
dari CDN.
-
Tambahkan modul
ngRoute
sebagai dependensi aplikasi.
-
Konfigurasikan route dengan
$routeProvider
.
Contoh menyisipkan
angular-route.js
:
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.8.2/angular-route.min.js"></script>
Contoh konfigurasi routing di
app.js
:
angular.module('myApp', ['ngRoute'])
.config(['$routeProvider', function($routeProvider) {
$routeProvider
.when('/home', {
templateUrl: 'home.html',
controller: 'HomeController'
})
.when('/about', {
templateUrl: 'about.html',
controller: 'AboutController'
})
.otherwise({
redirectTo: '/home'
});
}]);
Contoh navigasi di HTML:
<a href="#!/home">Home</a> |
<a href="#!/about">About</a>
<div ng-view></div>
7. Service dan Dependency Injection
Service adalah objek singleton yang menyediakan fungsi atau data yang dapat digunakan di berbagai bagian aplikasi. AngularJS menggunakan dependency injection untuk menyuntikkan service ke controller atau komponen lain.
Contoh membuat service:
angular.module('myApp', [])
.service('MathService', function() {
this.kali = function(a, b) {
return a * b;
};
})
.controller('CalcController', ['$scope', 'MathService', function($scope, MathService) {
$scope.hitung = function() {
$scope.hasil = MathService.kali($scope.angka1, $scope.angka2);
};
}]);
Contoh HTML untuk controller di atas:
<div ng-controller="CalcController">
<input type="number" ng-model="angka1" placeholder="Angka 1">
<input type="number" ng-model="angka2" placeholder="Angka 2">
<button ng-click="hitung()">Hitung Kali</button>
<p>Hasil: {{ hasil }}</p>
</div>
8. Tips dan Best Practices
-
Modularisasi kode:
Pisahkan kode menjadi modul, controller, service, dan directive agar mudah dikelola.
-
Gunakan controllerAs syntax:
Untuk menghindari kebingungan dengan
$scope
, gunakan
controllerAs
dan
this
.
-
Manfaatkan direktif custom:
Buat direktif sendiri untuk komponen UI yang reusable.
-
Testing:
Gunakan unit testing dengan Karma dan Jasmine untuk memastikan kualitas kode.
-
Optimasi performa:
Hindari penggunaan
ng-repeat
berlebihan dan gunakan
track by
untuk meningkatkan performa.
-
Gunakan tools debugging:
Seperti Batarang untuk memudahkan debugging aplikasi AngularJS.
9. Sumber Belajar dan Source Code
Berikut beberapa sumber belajar dan contoh source code untuk memperdalam AngularJS:
Contoh source code lengkap aplikasi Todo List AngularJS:
<!DOCTYPE html>
<html ng-app="todoApp">
<head>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.8.2/angular.min.js"></script>
<style>
body { font-family: Arial, sans-serif; background: #f9fafb; }
.todo-container { max-width: 400px; margin: 2rem auto; background: white; padding: 1rem 2rem; border-radius: 8px; box-shadow: 0 2px 8px rgba(0,0,0,0.1); }
.todo-item { display: flex; align-items: center; margin-bottom: 0.5rem; }
.todo-item input[type="checkbox"] { margin-right: 0.75rem; }
.todo-item.done span { text-decoration: line-through; color: #9ca3af; }
</style>
</head>
<body>
<div class="todo-container" ng-controller="TodoController">
<h2>Todo List</h2>
<input type="text" ng-model="todoText" placeholder="Tambah tugas" class="w-full p-2 border border-gray-300 rounded mb-3">
<button ng-click="tambahTodo()" class="bg-indigo-600 text-white px-4 py-2 rounded hover:bg-indigo-700">Tambah</button>
<ul class="mt-4">
<li ng-repeat="todo in todos" ng-class="{done: todo.done}" class="todo-item">
<input type="checkbox" ng-model="todo.done">
<span>{{ todo.text }}</span>
</li>
</ul>
<button ng-click="hapusSelesai()" class="mt-4 bg-red-600 text-white px-4 py-2 rounded hover:bg-red-700">Hapus yang selesai</button>
</div>
<script>
angular.module('todoApp', [])
.controller('TodoController', ['$scope', function($scope) {
$scope.todos = [
{ text: 'Belajar AngularJS', done: false },
{ text: 'Membuat aplikasi SPA', done: false }
];
$scope.tambahTodo = function() {
if ($scope.todoText) {
$scope.todos.push({ text: $scope.todoText, done: false });
$scope.todoText = '';
}
};
$scope.hapusSelesai = function() {
$scope.todos = $scope.todos.filter(todo => !todo.done);
};
}]);
</script>
</body>
</html>