MODUL
3
FUNGSI LANJUTAN ANGULAR JS
TRANSFER OF KNOWLEDGE | AULIA OKTAVELLA P
DAFTAR ISI
I.
ANGULAR JS MODEL ....................................................................................................................... 1
1.1
Directive ng-model.................................................................................................................. 1
1.2
Two-Way Binding .................................................................................................................... 1
1.3
Validate User Input ................................................................................................................. 1
1.4
Application Status ................................................................................................................... 1
1.5
CSS Classes .............................................................................................................................. 1
II. ANGULAR JS CONTROLLERS ............................................................................................................ 2
2.1
Penerapan Controller .............................................................................................................. 2
2.2
Controller Methods................................................................................................................. 2
2.3
Controller pada External Files ................................................................................................. 3
III. ANGULAR JS SCOPES ....................................................................................................................... 3
3.1
Penggunaan Scope .................................................................................................................. 3
3.2
Pemahaman tentang Scope .................................................................................................... 4
3.3
Root Scope .............................................................................................................................. 4
IV. ANGULAR JS FILTERS ....................................................................................................................... 5
4.1
Filter pada Expression ............................................................................................................. 5
4.2
Filter pada Directive ................................................................................................................ 5
4.3
Filter pada Array berdasarkan Inputan ................................................................................... 6
4.4
Custom Filter ........................................................................................................................... 6
V. ANGULAR JS SERVICES .................................................................................................................... 7
5.1
Penggunaan Services .............................................................................................................. 7
5.2
The $http Service .................................................................................................................... 7
5.3
The $timeout Service .............................................................................................................. 7
5.4
The $interval Service ............................................................................................................... 8
5.5
Custom Service........................................................................................................................ 8
VI. ANGULAR JS EVENTS ....................................................................................................................... 8
6.1
Mouse Events .......................................................................................................................... 8
6.2
The ng-click Directive .............................................................................................................. 9
6.3
Toggle, True/False ................................................................................................................... 9
6.4
$event Object........................................................................................................................ 10
VII. ANGULAR JS FORMS...................................................................................................................... 10
7.1
Input Control ......................................................................................................................... 10
7.2
Data Binding .......................................................................................................................... 10
7.3
Checkbox ............................................................................................................................... 11
7.4
Radiobuttons ......................................................................................................................... 11
7.5
Selectbox ............................................................................................................................... 11
VIII. REFERENSI ..................................................................................................................................... 11
L
I.
ANGULAR JS MODEL
Directive ng-model berfungsi untuk mengambil nilai pada tag HTML (input , select , textarea )
pada Aplikasi Angular JS
1.1 Directive ng-model
Dengan directive ng-model Anda dapat mengikat nilai dari input field ke variable yang dibuat di
Angular JS
<div ng-app="myApp" ng-controller="myCtrl">
Name: <input ng-model="name">
</div>
<script>
var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope) {
$scope.name = "John Doe";
});
</script>
1.2 Two-Way Binding
Binding berlangsung di dua arah. JIka pengguna mengubah nilai di dalam input field, maka
properti Angular JS juga akan mengubah nilainya.
<div ng-app="myApp" ng-controller="myCtrl">
Name: <input ng-model="name">
<h1>You entered: {{name}}</h1>
</div>
1.3 Validate User Input
Directive ng-model dapat menyediakan validasi tipe untuk data aplikasi (number, email,
required). Pada contoh dibawah, <span> hanya akan ditampilkan jika expression dalam attribute ngshow menghasilkan nilai true.
<form ng-app="" name="myForm">
Email:
<input type="email" name="myAddress" ng-model="text">
<span ng-show="myForm.myAddress.$error.email">Not a valid e-mail
address</span>
</form>
1.4 Application Status
Directive ng-model dapat memberikan status untuk data aplikasi (invalid, dirty, touched, error):
<form ng-app="" name="myForm" ng-init="myText = 'post@myweb.com'">
Email:
<input type="email" name="myAddress" ng-model="myText" required>
<h1>Status</h1>
{{myForm.myAddress.$valid}}
{{myForm.myAddress.$dirty}}
{{myForm.myAddress.$touched}}
</form>
1.5 CSS Classes
Directive ng-model menyediakan class CSS untuk elemen HTML, tergantung pada statusnya.
Directive ng-model menambahkan / menghapus kelas-kelas berikut, sesuai dengan status kolom form:
➢ ng-empty
➢ ng-untouched
➢ ng-dirty
➢ ng-not-empty
➢ ng-valid
➢ ng-pending
➢ ng-touched
➢ ng-invalid
➢ ng-pristine
MODUL 3 – FUNGSI LANJUTAN ANGULAR JS
1
L
II. ANGULAR JS CONTROLLERS
Aplikasi AngularJS bergantung pada controller untuk mengontrol aliran data dalam aplikasi.
Sebuah controller didefinisikan menggunakan direktif ng-controller. Sebuah controller adalah Objek
JavaScript yang berisi atribut / sifat, dan fungsi. Setiap controller menerima $scope sebagai parameter,
yang mengacu pada aplikasi / modul bahwa controller perlu untuk ditangani.
2.1 Penerapan Controller
Berikut ini adalah contoh penerapan controller pada Aplikasi Angular JS.
<div ng-app="myApp" ng-controller="myCtrl">
First Name: <input type="text" ng-model="firstName"><br>
Last Name: <input type="text" ng-model="lastName"><br>
<br>
Full Name: {{firstName + " " + lastName}}
</div>
<script>
var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope) {
$scope.firstName = "John";
$scope.lastName = "Doe";
});
</script>
Dari kode program diatas, berikut adalah penjelasannya :
➢ Aplikasi Angular JS di definisikan oleh ng-app = “myApp”. Aplikasi ini berjalan di dalam sebuah
tag <div>
➢ Atribute ng-controller = “myCtrl” adalah directive Angular JS yang didefinisikan sebagai
controller.
➢ Function myCtrl adalah fungsi JavaScript
➢ Pada kode program diatas, controller dipanggil dengan objek $scope. Di Angular JS $scope
merupakan application object (sebagai pemilik dari variable dan fungsi yang ada di aplikasi).
➢ Controller yang telah didefinisikan diatas, membuat dua properties/variable di dalam scope
dengan nama firstName dan lastName
➢ Directive ng-model melakukan bind pada input fields ke controller properties (firstName dan
lastName)
2.2 Controller Methods
Controller juga dapat memiliki method ((variables as functions) :
<div ng-app="myApp" ng-controller="personCtrl">
First Name: <input type="text" ng-model="firstName"><br>
Last Name: <input type="text" ng-model="lastName"><br>
<br>
Full Name: {{fullName()}}
</div>
<script>
var app = angular.module('myApp', []);
app.controller('personCtrl', function($scope) {
$scope.firstName = "John";
$scope.lastName = "Doe";
$scope.fullName = function() {
return $scope.firstName + " " + $scope.lastName;
};
});
</script>
MODUL 3 – FUNGSI LANJUTAN ANGULAR JS
2
L
2.3 Controller pada External Files
Dalam pengembangan Aplikasi yang lebih besar, biasanya controller disimpan pada file external.
Hal itu dapat dilakukan dengan meletakkan nama file controller diantara tag <script>, seperti yang
terlihat pada kode dibawah ini :
<div ng-app="myApp" ng-controller="personCtrl">
First Name: <input type="text" ng-model="firstName"><br>
Last Name: <input type="text" ng-model="lastName"><br>
<br>
Full Name: {{fullName()}}
</div>
<script src="personController.js"></script>
Contoh lainnya :
Pada contoh ini , kita membuat sebuah file controller kemudian simpan dengan nama
namesController.js
angular.module('myApp', []).controller('namesCtrl', function($scope) {
$scope.names = [
{name:'Jani',country:'Norway'},
{name:'Hege',country:'Sweden'},
{name:'Kai',country:'Denmark'}
];
});
Kemudian memanggil file controller yang telah kita buat ke dalam aplikasi
<div ng-app="myApp" ng-controller="namesCtrl">
<ul>
<li ng-repeat="x in names">
{{ x.name + ', ' + x.country }}
</li>
</ul>
</div>
<script src="namesController.js"></script>
III. ANGULAR JS SCOPES
Scope diibaratkan sebagai sebuah objek yang menjadi penghubung antara View dan Controller.
Scope memegang data yang dibutuhkan untuk kemudian ditampilkan. Controller bertanggung jawab
untuk menginisialisasi data dan kemudian View membutuhkannya untuk ditampilkan. Hal ini
dilakukan dengan membuat perubahan pada Scope.
3.1 Penggunaan Scope
Kapankah kita dapat menggunakan scope ?? Ketika kita membuat sebuah controller di Angular
JS, dengan mengirimkan objek $scope sebagai argument.
Contoh :
Properties yang dibuat di controller, dapat di panggil dalam view. Ketika menambahkan
properti ke objek $scope di controller, view (HTML) akan mendapatkan akses ke properti tersebut. Di
dalam view kita tidak memanggilnya menggunakan “$scope”, melainkan hanya merujuk pada nama
properti seperti {{carname}}
<div ng-app="myApp" ng-controller="myCtrl">
<h1>{{carname}}</h1>
</div>
<script>
var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope) {
MODUL 3 – FUNGSI LANJUTAN ANGULAR JS
3
L
$scope.carname = "Volvo";
});
</script>
3.2 Pemahaman tentang Scope
Jika dipahami lebih lanjut, aplikasi Angular JS terdiri dari :
➢ View, merupakan HTML.
➢ Model, merupakan data yang tersedia untuk view.
➢ Controller, merupakan fungsi JavaScript yang membuat/mengubah/menghapus/mengontrol
data.
Scope merupakan objek JavaScript yang memiliki properti dan method, yang dapat digunakan di
view maupun controller.
Contoh :
Ketika kita melakukan perubahan pada view, maka model dan controller juga akan ikut
mengalami perubahan
<div ng-app="myApp" ng-controller="myCtrl">
<input ng-model="name">
<h1>My name is {{name}}</h1>
</div>
<script>
var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope) {
$scope.name = "John Doe";
});
</script>
3.3 Root Scope
Semua aplikasi memiliki $rootScope, merupakan scope yang dibuat pada elemen HTML yang
berisi directive ng-app. Jika sebuah variable memiliki nama yang sama pada current scope dan di
rootScope, maka aplikasi akan membaca variable yang ada pada current scope.
Contoh :
Sebuah variable dengan nama “color” yang berada di kedua controller scope dan rootScope
<body ng-app="myApp">
<p>The rootScope's favorite color:</p>
<h1>{{color}}</h1>
<div ng-controller="myCtrl">
<p>The scope of the controller's favorite color:</p>
<h1>{{color}}</h1>
</div>
<p>The rootScope's favorite color is still:</p>
<h1>{{color}}</h1>
<script>
var app = angular.module('myApp', []);
app.run(function($rootScope) {
$rootScope.color = 'blue';
});
app.controller('myCtrl', function($scope) {
$scope.color = "red";
});
</script>
</body>
MODUL 3 – FUNGSI LANJUTAN ANGULAR JS
4
L
IV. ANGULAR JS FILTERS
Di dalam membangun sebuah aplikasi, kita pasti akan dihadapkan pada bagaimana cara untuk
memanipulasi data. Dengan tujuan untuk memudahkan user dalam membaca dan menggunakan data.
AngularJS memiliki filter untuk membantu Anda melakukannya, filter sangat baik untuk memanipulasi
teks dalam tampilan HTML Anda.
Filter bisa digunakan di dalam controller menggunakan tanda pipeline atau karakter | . Filter
dalam AngularJS adalah case sensitive, jadi Anda mesti berhati-hati di dalam menggunakannya. Di
bawah ini adalah beberapa filter yang umum digunakan.
Nama Filter
Fungsi
currency
Format a number to a currency format.
date
Format a date to a specified format.
filter
Select a subset of items from an array.
json
Format an object to a JSON string
limitTo
Limits an array/string, into a specified number of elements/characters.
lowercase
Format a string to lower case.
number
Format a number to a string.
orderBy
Orders an array by an expression.
uppercase
Format a string to upper case.
4.1 Filter pada Expression
Filter dapat ditambahkan kedalam expression dengan menggunakan karakter “|”, kemudian
diikuti dengan filter.
Contoh : Melakukan filter dengan mengubah ke uppercase
<div ng-app="myApp" ng-controller="personCtrl">
<p>The name is {{ lastName | uppercase }}</p>
</div>
Contoh : Melakukan filter dengan mengubah ke lowercase
<div ng-app="myApp" ng-controller="personCtrl">
<p>The name is {{ lastName | lowercase }}</p>
</div>
4.2 Filter pada Directive
Filter juga dapat ditambahkan ke dalam directive, dengan menggunakan karakter pipa “|” dan
diikuti dengan filter, seperti pada ng-repeat dibawah ini :
MODUL 3 – FUNGSI LANJUTAN ANGULAR JS
5
L
<div ng-app="myApp" ng-controller="namesCtrl">
<ul>
<li ng-repeat="x in names | orderBy:'country'">
{{ x.name + ', ' + x.country }}
</li>
</ul>
</div>
4.3 Filter pada Array berdasarkan Inputan
Untuk dapat melakukan filter pada array dengan menggunakan inputan, kita bisa melakukannya
dengan memasukkan directive ng-model kedalam form <input>, sehingga nilai yang dimasukkan pada
form inputan akan digunakan expression dalam filter.
Ketika kita memasukkan nilai ke dalam form inputan tersebut, maka yang tampil dari array
tersebut adalah yang sesuai dengan nilai yang dimasukkan.
<div ng-app="myApp" ng-controller="namesCtrl">
<p><input type="text" ng-model="test"></p>
<ul>
<li ng-repeat="x in names | filter : test">
{{ x }}
</li>
</ul>
</div>
4.4 Custom Filter
Selain menggunakan filter yang telah disediakan, kita juga bisa membuat filter sendiri dengan
mendaftarkan fungsi filter baru dengan module anda. Seperti contoh kode dibawah ini, kita membuat
custom filter dengan nama “myFormat”. Filter myFormat dibawah ini akan mengubah setiap karakter
menjadi uppercase (huruf kapital).
<ul ng-app="myApp" ng-controller="namesCtrl">
<li ng-repeat="x in names">
{{x | myFormat}}
</li>
</ul>
<script>
var app = angular.module('myApp', []);
app.filter('myFormat', function() {
return function(x) {
var i, c, txt = "";
for (i = 0; i < x.length; i++) {
c = x[i];
if (i % 2 == 0) {
c = c.toUpperCase();
MODUL 3 – FUNGSI LANJUTAN ANGULAR JS
6
L
}
txt += c;
}
return txt;
};
});
app.controller('namesCtrl', function($scope) {
$scope.names = ['Jani', 'Carl', 'Margareth', 'Hege', 'Joe',
'Gustav', 'Birgit', 'Mary', 'Kai'];
});
</script>
V. ANGULAR JS SERVICES
Pada Angular JS, service adalah fungsi atau objek yang tersedia dan terbatas hanya untuk aplikasi
Angular JS yang dikembangkan. Pada Angular JS, kita dapat menggunakan salah satu dari banyak
service yang telah di sediakan oleh Angular JS, maupun membuat service sendiri.
Angular JS memiliki sekitar 30 service built-in, salah satunya adalah $location service. $location
service memiliki method yang dapat mengembalikan informasi tentang lokasi halaman web saat ini.
Contoh :
Kode program dibawah ini menggunakan service $location built-in untuk mendapatkan url dari
halaman web yang sedang dibuka. Service $location diteruskan ke controller sebagai argument. Dalam
penggunaan service di controller, maka harus di definisikan sebagai dependency.
var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope, $location) {
$scope.myUrl = $location.absUrl();
});
5.1 Penggunaan Services
Terdapat banyak service dalam Angular JS, seperti service $location, kegunaan nya hampir sama
seperti ketika menggunakan objek yang sudah ada di DOM, seperti window.location object. Namun
penggunaan object yang ada di DOM memiliki beberapa keterbatasan di Angular JS.
Pada Angular JS proses handle changes dan event properly, lebih baik jika menggunakan service
$location daripada window.location object.
5.2 The $http Service
$http Service merupakan salah satu service yang paling umum atau bahkan sering digunakan
dalam aplikasi Angular JS. Service ini digunakan untuk melakukan request ke server, dan
memungkinkan aplikasi dalam menangani response. Service ini digunakan untuk meminta data dari
server. Berikut ini adalah contoh penggunaan sederhana dari $http service :
var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope, $http) {
$http.get("welcome.htm").then(function (response) {
$scope.myWelcome = response.data;
});
});
5.3 The $timeout Service
$timeout Service merupakan fungsi dari window.setTimeOut versi Angular JS. Berikut adalah
contoh penggunaan nya (menampilkan pesan baru setelah 2 detik) :
app.controller('myCtrl', function($scope, $timeout) {
$scope.myHeader = "Hello World!";
$timeout(function () {
MODUL 3 – FUNGSI LANJUTAN ANGULAR JS
7
L
$scope.myHeader = "How are you today?";
}, 2000);
});
5.4 The $interval Service
$internal Service merupakan fungsi window.setInterval versi Angular JS. Berikut ini adalah
contoh penggunaan nya dengan menampilkan waktu setiap detik :
var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope, $interval) {
$scope.theTime = new Date().toLocaleTimeString();
$interval(function () {
$scope.theTime = new Date().toLocaleTimeString();
}, 1000);
});
5.5 Custom Service
Selain penggunaan service yang telah disediakan oleh Angular JS, kita juga bisa membuat service
kita sendiri. Untuk membuat custom service, maka hubungkan service yang telah dibuat ke module.
Contoh : Membuat service dengan nama hexafy
app.service('hexafy', function() {
this.myFunc = function (x) {
return x.toString(16);
}
});
Untuk menggunakan atau memanggil service yang telah dibuat maka tambahkan dependency
saat mendefinisikan controller. Service yang telah dibuat khusus dengan nama hexagy ini digunakan
untuk mengubah angka menjadi heksadesimal.
app.controller('myCtrl', function($scope, hexafy) {
$scope.hex = hexafy.myFunc(255);
});
VI. ANGULAR JS EVENTS
Pada Angular JS, kita dapat menambahkan event listeners ke elemen HTML dengan menggunakan
beberapa directive berikut ini :
➢ ng-mouseleave
➢ ng-focus
➢ ng-blur
➢ ng-mousemove
➢ ng-keydown
➢ ng-change
➢ ng-mouseover
➢ ng-keypress
➢ ng-click
➢ ng-mouseup
➢ ng-keyup
➢ ng-copy
➢ ng-paste
➢ ng-mousedown
➢ ng-cut
➢ ng-mouseenter
➢ ng-dblclick
Event Directive dapat memungkinkan kita untuk menjalankan fungsi Angular JS pada penggunaan
tertentu. Angular JS event tidak akan menimpa (overwrite) HTML event, ketika keduanya dieksekusi
secara bersamaan.
6.1 Mouse Events
Mouse Event dapat terjadi ketika kursor bergerak diatas elemen berikut ini :
➢ ng-mouseover
➢ ng-mouseenter
➢ ng-mousemove
MODUL 3 – FUNGSI LANJUTAN ANGULAR JS
8
L
➢ ng-mouseleave
Atau ketika tombol mouse diklik pada elemen berikut ini :
➢ ng-mousedown
➢ ng-mouseup
➢ ng-click
Contoh : Meningkatkan jumlah variabelketika mouse bergerak pada elemen <h1>
<div ng-app="myApp" ng-controller="myCtrl">
<h1 ng-mousemove="count = count + 1">Mouse over me!</h1>
<h2>{{ count }}</h2>
</div>
<script>
var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope) {
$scope.count = 0;
});
</script>
6.2 The ng-click Directive
Perintah ng-click mendefinisikan kode Angular JS yang akan dijalankan ketika elemen tersebut
sedang di klik.
<div ng-app="myApp" ng-controller="myCtrl">
<button ng-click="count = count + 1">Click me!</button>
<p>{{ count }}</p>
</div>
<script>
var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope) {
$scope.count = 0;
});
</script>
6.3 Toggle, True/False
Ketika kita ingin menampilkan sebagian dari kode HTML ketika di klik, dan menyembunyikannya
ketika tombol tersebut di klik lagi, seperti dropdown menu atau membuat tombol yang tampak seperti
toogle switch. Perhatikan contoh berikut :
➢ Variabel showMe di insialisasi awal dengan nilai Boolean = false
➢ Fungsi myFunc digunakan untuk menetapkan variable showMe ke arah kebalikannya dengan
menggunakan “!” (not operator)
<div ng-app="myApp" ng-controller="myCtrl">
<button ng-click="myFunc()">Click Me!</button>
<div ng-show="showMe">
<h1>Menu:</h1>
<div>Pizza</div>
<div>Pasta</div>
<div>Pesce</div>
</div>
</div>
<script>
var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope) {
$scope.showMe = false;
MODUL 3 – FUNGSI LANJUTAN ANGULAR JS
9
L
$scope.myFunc = function() {
$scope.showMe = !$scope.showMe;
}
});
</script>
6.4 $event Object
Pada Angular JS, kita dapat mengirimkan $event object sebagai argument ketika memanggil
sebuah fungsi. Perhatikan contoh berikut ($event object berisi browser’s event object) :
<div ng-app="myApp" ng-controller="myCtrl">
<h1 ng-mousemove="myFunc($event)">Mouse Over Me!</h1>
<p>Coordinates: {{x + ', ' + y}}</p>
</div>
<script>
var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope) {
$scope.myFunc = function(myE) {
$scope.x = myE.clientX;
$scope.y = myE.clientY;
}
});
</script>
VII. ANGULAR JS FORMS
Form pada Angular JS menyediakan data binding dan validasi dari input control.
7.1 Input Control
Input control adalah HTML input element, seperti :
➢ input elements
➢ select elements
➢ button elements
➢ textarea elements
7.2 Data Binding
Input control menyediakan data binding dengan menggunakan directive ng-model
<input type="text" ng-model="firstname">
Sekarang aplikasi ini memiliki properti dengan nama fisrtname. Directive ng-model binding
(mengikat) input controller ke seluruh aplikasi. Properti bernama firstname, dapat langsung dirujuk
dalam controller, seperti yang terlihat pada kode dibawah ini :
<script>
var app = angular.module('myApp', []);
app.controller('formCtrl', function($scope) {
$scope.firstname = "John";
});
</script>
Properti bernama firstname juga dapat dirujuk ke tempat lain yang berada dalam aplikasi,
perhatikan kode program dibawah ini :
<form>
First Name: <input type="text" ng-model="firstname">
</form>
<h1>You entered: {{firstname}}</h1>
MODUL 3 – FUNGSI LANJUTAN ANGULAR JS
10
L
7.3 Checkbox
Checkbox memiliki dua nilai yaitu true atau false. Untuk penerapan checkbox, gunakan directive
ng-model , dan gunakan nilai nya pada aplikasi yang dibuat. Berikut ini adalah contoh (menampilkan
header, ketika checkbox di centang) :
<form>
Check to show a header:
<input type="checkbox" ng-model="myVar">
</form>
<h1 ng-show="myVar">My Header</h1>
7.4 Radiobuttons
Melakukan binding pada radio buttons ke aplikasi dengan menggunakan directive ng-model.
Radio buttons dengan ng-model yang sama dapat memiliki nilai yang berbeda, tetapi hanya yang
terpiih yang akan digunakan. Berikut ini adalah contoh (menampilkan beberapa teks berdasarkan nilai
yang dipilih pada radio button :
<form>
Pick a
<input
<input
<input
</form>
topic:
type="radio" ng-model="myVar" value="dogs">Dogs
type="radio" ng-model="myVar" value="tuts">Tutorials
type="radio" ng-model="myVar" value="cars">Cars
7.5 Selectbox
Melakukan binding pada selectbox ke aplikasi dengan menggunakan directive ng-model. Properti
yang didefinisikan dalam atribut ng-model akan memiliki nilai yang sama dengan opsi yang dipilih pada
selectbox.
<form>
Select a topic:
<select ng-model="myVar">
<option value="">
<option value="dogs">Dogs
<option value="tuts">Tutorials
<option value="cars">Cars
</select>
</form>
VIII. REFERENSI
1.
2.
3.
https://www.yudana.id/expressions-dan-controllers-pada-angular-js/
https://kursuswebdesign.org/pengenalan-serta-fungsi-ng-app-ng-model-ng-bind-padaangular-js/
https://www.w3schools.com/angular/
MODUL 3 – FUNGSI LANJUTAN ANGULAR JS
11