Advertisement
  1. Code
  2. Web Development

Membangun Aplikasi Web Dari Awal di AngularJS

Scroll to top
Read Time: 18 min

Indonesian (Bahasa Indonesia) translation by Sap (you can also view the original English article)

Dalam tutorial AngularJS sebelumnya saya membahas semua dasar-dasar cara bangun dan berjalan dengan Angular dalam waktu sekitar 30 menit. Tutorial ini akan memperluas apa yang dibahas di sana dengan membuat aplikasi web dunia nyata sederhana.

Aplikasi web sederhana ini akan memungkinkan penggunanya untuk melihat, mencari, dan menyaring acara TV Premier selama 30 hari ke depan. Sebagai penampil seri yang tajam, saya selalu mencari sesuatu yang baru untuk ditonton ketika acara favorit saya mati, jadi saya pikir saya akan membuat aplikasi untuk membantu saya menemukan apa yang saya cari.

Sebelum memulai, Anda mungkin ingin melihat demo dari atas, untuk melihat apa yang akan kami buat dalam tutorial ini.


Mulai

Untuk memulai, kita membutuhkan aplikasi kerangka AngularJS yang sudah memiliki semua JavaScript dan CSS yang diperlukan untuk membuat aplikasi TV Show Premier. Lanjutkan dan unduh kerangka ini dari tombol "file sumber unduhan" di atas.

Setelah Anda mengunduh file, Anda harus memiliki struktur direktori seperti yang ditunjukkan di bawah ini:

figure1-skeleton-directory-structure

Melihat struktur direktori dan file yang disertakan Anda akan melihat bahwa kita akan menggunakan Twitter Bootstrap untuk membuat aplikasi web kita sedikit lebih cantik, tetapi tutorial ini tidak akan melihat di Twitter Bootstrap secara mendetail (pelajari lebih lanjut tentang Twitter Bootstrap). Selain itu, tutorial ini tidak akan mencakup cara men-setup aplikasi AngularJS yang baru karena tutorial AngularJS yang disebutkan di atas sudah mencakup hal ini secara mendetail.

Setelah membuka index.html, dengan browser pilihan Anda, Anda akan melihat halaman web yang sangat sederhana hanya dengan judul dan beberapa pemformatan dasar seperti yang terlihat di bawah ini:

figure2-basic-web-pagefigure2-basic-web-pagefigure2-basic-web-page

Memuat Data Kita

Hal pertama yang kita perlukan untuk membuat aplikasi Acara TV, adalah informasi tentang acara TV. Kita akan menggunakan API yang disediakan oleh Trakt.tv. Sebelum kita dapat memulai Anda akan membutuhkan kunci API, Anda dapat mendaftar untuk satu di situs web mereka.

Mengapa menggunakan API ini? Apakah saya benar-benar harus mendaftar? Kita menggunakan API ini sehingga aplikasi kita akan menggunakan data nyata dan benar-benar akan memberikan beberapa penggunaan setelah selesai. Juga, dengan menggunakan API ini kita tidak perlu membahas penerapan sisi server apa pun dalam tutorial ini dan dapat fokus sepenuhnya pada AngularJS. Beberapa menit untuk mendaftar untuk API tambahan akan layak.

Sekarang Anda memiliki kunci API Anda sendiri, kita dapat memanfaatkan API Trakt untuk mendapatkan beberapa informasi di acara TV. Kita akan menggunakan salah satu panggilan API yang tersedia untuk tutorial ini, informasi lebih lanjut tentang ini tersedia dalam dokumen api. Panggilan API ini akan memberi kita semua Acara TV Premier dalam jangka waktu tertentu.

Buka mainController.js dan ubah untuk mencocokkan kode di bawah ini:

1
    app.controller("mainController", function($scope, $http){
2
3
        $scope.apiKey = "[YOUR API KEY HERE]";
4
        $scope.init = function() {
5
            //API requires a start date
6
            var today = new Date();
7
            //Create the date string and ensure leading zeros if required
8
            var apiDate = today.getFullYear() + ("0" + (today.getMonth() + 1)).slice(-2) + "" + ("0" + today.getDate()).slice(-2);
9
            $http.jsonp('http://api.trakt.tv/calendar/premieres.json/' + $scope.apiKey + '/' + apiDate + '/' + 30 + '/?callback=JSON_CALLBACK').success(function(data) {
10
                console.log(data);
11
            }).error(function(error) {
12
13
            });
14
        };
15
16
    });

Jika Anda melihat di dalam file index.html, untuk baris berikut:

1
    <div class="container main-frame" ng-app="TVPremieresApp" ng-controller="mainController" ng-init="init()">

Anda akan melihat bahwa metode ng-init memanggil fungsi init, ini berarti bahwa fungsi init() dalam mainController kita akan dipanggil setelah halaman telah dimuat.

Jika Anda membaca dokumentasi API untuk metode calendar/premieres Anda akan melihat bahwa dibutuhkan tiga parameter, kunci API Anda, tanggal mulai (mis. 20130616) dan jumlah hari.

Untuk menyediakan ketiga parameter ini, pertama-tama kita perlu mendapatkan tanggal hari ini menggunakan metode JavaScript Date() dan memformatnya ke format tanggal yang ditentukan API untuk membuat string apiDate. Sekarang kita memiliki semua yang kita butuhkan, kita dapat membuat panggilan $http.jsonp ke metode API. Ini akan memungkinkan aplikasi web kita untuk memanggil URL yang tidak berada dalam domain kita sendiri dan menerima beberapa data JSON. Pastikan bahwa ?callback=JSON_CALLBACK dimasukkan ke URI permintaan sehingga fungsi callback .success yang kita sambungkan dipanggil pada respons.

Dalam fungsi .success, kita hanya menampilkan data yang diterima ke konsol. Buka index.html dalam browser Anda dan buka konsol JavaScript, Anda akan melihat sesuatu seperti berikut:

figure3-javascript-consolefigure3-javascript-consolefigure3-javascript-console

Ini menunjukkan bahwa kita berhasil melakukan panggilan ke API Trakt, otentikasi dengan kunci API kami dan menerima beberapa data JSON. Sekarang kita memiliki data acara TV, kita dapat melanjutkan ke langkah.


Menampilkan Data Kita

Memproses Objek JSON

Sebelum dapat menampilkan data, kita perlu memproses dan menyimpannya. Saat API mengembalikan episode premier yang dikelompokkan berdasarkan tanggal, kita ingin menghapus pengelompokan ini dan hanya membuat satu larik dengan semua episode perdana dan data yang terkait. Ubah mainController.js menjadi sebagai berikut:

1
    app.controller("mainController", function($scope, $http){
2
        $scope.apiKey = "[YOUR API KEY]";
3
        $scope.results = [];
4
        $scope.init = function() {
5
            //API requires a start date
6
            var today = new Date();
7
            //Create the date string and ensure leading zeros if required
8
            var apiDate = today.getFullYear() + ("0" + (today.getMonth() + 1)).slice(-2) + "" + ("0" + today.getDate()).slice(-2);
9
            $http.jsonp('http://api.trakt.tv/calendar/premieres.json/' + $scope.apiKey + '/' + apiDate + '/' + 30 + '/?callback=JSON_CALLBACK').success(function(data) {
10
                //As we are getting our data from an external source, we need to format the data so we can use it to our desired effect
11
                //For each day, get all the episodes
12
                angular.forEach(data, function(value, index){
13
                    //The API stores the full date separately from each episode. Save it so we can use it later
14
                    var date = value.date;
15
                    //For each episodes, add it to the results array
16
                    angular.forEach(value.episodes, function(tvshow, index){
17
                        //Create a date string from the timestamp so we can filter on it based on user text input
18
                        tvshow.date = date; //Attach the full date to each episode
19
                        $scope.results.push(tvshow);
20
                    });
21
                });
22
            }).error(function(error) {
23
24
            });
25
        };
26
    });

Kode di atas dikomentari dengan baik dan seharusnya mudah diikuti, mari kita lihat perubahan ini. Pertama, kita mendeklarasikan cakupan variabel $scope.results sebagai larik yang akan menahan hasil diproses. Kita kemudian menggunakan angular.forEach (yang mirip dengan metode $.each jQuery bagi mereka yang mengetahuinya) untuk mengulang melalui setiap grup tanggal dan menyimpan tanggal dalam variabel date lokal.

Kita kemudian membuat loop lain yang melintas melalui masing-masing acara TV dalam kelompok tanggal, menambahkan tanggal yang disimpan secara lokal ke objek tvshow dan akhirnya menambahkan setiap objek tvshow ke array $scope.results. Dengan semua ini dilakukan, array $scope.results kita akan terlihat seperti berikut:

figure4-formatted-tvshow-json-objectsfigure4-formatted-tvshow-json-objectsfigure4-formatted-tvshow-json-objects

Membuat daftar HTML

Kita sekarang memiliki beberapa data yang ingin ditampilkan dalam daftar, di halaman kita. Kita dapat membuat beberapa HTML dengan ng-repeat untuk secara dinamis membuat elemen daftar berdasarkan data dalam $scope.results. Tambahkan kode HTML berikut dalam daftar tidak berurutan yang memiliki kelas episode-list di index.html:

1
    <li ng-repeat="tvshow in results">
2
        <div class="row-fluid">
3
            <div class="span3">
4
                <img src="{{tvshow.episode.images.screen}}" />
5
                <div class="ratings"><strong>Ratings:</strong> <span class="label"><i class="icon-thumbs-up"></i> {{tvshow.episode.ratings.loved}}</span> <span class="label"><i class="icon-thumbs-down"></i> {{tvshow.episode.ratings.hated}}</span> <span class="label label-important" ng-class="{'label-success': tvshow.episode.ratings.percentage >= 50}"><strong>%</strong> {{tvshow.episode.ratings.percentage}}</div>
6
            </div>
7
            <div class="span6">
8
                <h3>{{tvshow.show.title}}: {{tvshow.episode.title}}</h3>
9
                <p>{{tvshow.episode.overview}}</p>
10
            </div>
11
            <div class="span3">
12
                <div class="fulldate pull-right label label-info">{{tvshow.date}}</div>
13
                <ul class="show-info">
14
                    <li><strong>On Air:</strong> {{tvshow.show.air_day}} {{tvshow.show.air_time}}</li>
15
                    <li><strong>Network:</strong> {{tvshow.show.network}}</li>
16
                    <li><strong>Season #:</strong> {{tvshow.episode.season}}</li>
17
                    <li><strong>Genres:</strong> <span class="label label-inverse genre" ng-repeat="genre in tvshow.show.genres">{{genre}}</span></li>
18
                </ul>
19
            </div>
20
        </div>
21
    </li>

HTML ini hanya membuat elemen daftar tunggal dengan ng-repeat. ng-repeat = "tvshow in results" memberitahu angular untuk mengulang elemen daftar ini untuk setiap objek dalam array $scope.results. Ingat bahwa kita tidak perlu menyertakan $scope, karena kita berada dalam sebuah elemen dengan controller yang ditentukan (lihat tutorial sebelumnya untuk lebih lanjut tentang ini).

Di dalam elemen li kita dapat mereferensikan tvshow sebagai variabel yang akan menyimpan semua data objek untuk masing-masing acara TV dalam $scope.results. Di bawah ini adalah contoh salah satu objek dalam $scope.results sehingga Anda dapat dengan mudah melihat cara mereferensikan setiap irisan data:

1
    {
2
    "show":{
3
        "title":"Agatha Christie's Marple",
4
        "year":2004,
5
        "url":"http://trakt.tv/show/agatha-christies-marple",
6
        "first_aired":1102838400,
7
        "country":"United Kingdom",
8
        "overview":"Miss Marple is an elderly spinster who lives in the village of St. Mary Mead and acts as an amateur detective. Due to her long and eventful life crimes often remind her of other incidents. Although Miss Marple looks sweet, frail, and old, she fears nothing; either dead or living.",
9
        "runtime":120,
10
        "network":"ITV",
11
        "air_day":"Monday",
12
        "air_time":"9:00pm",
13
        "certification":"TV-14",
14
        "imdb_id":"tt1734537",
15
        "tvdb_id":"78895",
16
        "tvrage_id":"2515",
17
        "images":{
18
            "poster":"http://slurm.trakt.us/images/posters/606.jpg",
19
            "fanart":"http://slurm.trakt.us/images/fanart/606.jpg",
20
            "banner":"http://slurm.trakt.us/images/banners/606.jpg"
21
        },
22
        "ratings":{
23
            "percentage":91,
24
            "votes":18,
25
            "loved":18,
26
            "hated":0
27
        },
28
        "genres":[
29
            "Drama",
30
            "Crime",
31
            "Adventure"
32
        ]
33
    },
34
    "episode":{
35
        "season":6,
36
        "number":1,
37
        "title":"A Caribbean Mystery",
38
        "overview":"\"Would you like to see a picture of a murderer?\", Jane Marple is asked by Major Palgrave whilst on a luxurious holiday in the West Indies. When she replies that she would like to hear the story, he explains. There once was a man who had a wife who tried to hang herself, but failed. Then she tried again later, and succeeded in killing herself. The man remarried to a woman who then tried to gas herself to death. She failed, but then tried again later and succeeded. Just as Major Palgrave is about to show the picture to her, he looks over her shoulder, appears startled, and changes the subject. The next morning, a servant, Victoria Johnson, finds him dead in his room. Doctor Graham concludes that the man died of heart failure; he showed all the symptoms, and had a bottle of serenite (a drug for high blood pressure) on his table.",
39
        "url":"http://trakt.tv/show/agatha-christies-marple/season/6/episode/1",
40
        "first_aired":1371366000,
41
        "images":{
42
            "screen":"http://slurm.trakt.us/images/fanart/606-940.jpg"
43
        },
44
        "ratings":{
45
            "percentage":0,
46
            "votes":0,
47
            "loved":0,
48
            "hated":0
49
        }
50
    },
51
    "date":"2013-06-16"
52
    }

Sebagai contoh, dalam elemen li, kita bisa mendapatkan judul acara dengan merujuk tvshow.show.title dan membungkusnya dalam kurung kurawal ganda: {{ }}. Dengan pemahaman ini, seharusnya mudah untuk melihat informasi apa yang akan ditampilkan untuk setiap elemen daftar. Berkat CSS yang dibundel dengan struktur kerangka, jika Anda menyimpan perubahan ini dan membuka index.html dalam browser Anda, Anda akan melihat daftar acara TV yang diformat dengan baik dengan informasi dan gambar terkait. Ini ditunjukkan pada gambar di bawah ini:

figure5-formatted-show-listfigure5-formatted-show-listfigure5-formatted-show-list

Kelas Bersyarat

Anda mungkin atau mungkin tidak memperhatikan:

1
ng-class="{'label-success': tvshow.episode.ratings.percentage >= 50}"

...yang dilampirkan ke salah satu elemen rentang, dalam bagian peringkat, dalam HTML di atas. ng-class memungkinkan kita untuk menerapkan class secara kondisional ke elemen HTML. Ini sangat berguna di sini, karena kita dapat menerapkan gaya yang berbeda ke elemen span persentase tergantung pada apakah persentase tayangan acara TV tinggi atau tidak.

Dalam contoh HTML di atas, kita ingin menerapkan kelas label-success, yang merupakan kelas Bootstrap Twitter, yang akan mengatur rentang untuk memiliki latar belakang hijau dan teks putih. Kita hanya ingin menerapkan kelas ini ke elemen jika persentase rating lebih besar dari atau sama dengan 50. Kita bisa melakukan ini sesederhana tvshow.episode.ratings.percentage >= 50. Lihatlah daftar acara TV yang diformat di browser Anda, jika ada persentase yang memenuhi ketentuan ini, mereka harus ditampilkan dengan warna hijau.


Membuat Filter Pencarian

Kita sekarang memiliki daftar acara perdana yang akan datang, yang sangat bagus, tetapi tidak menawarkan banyak fungsi. Kita sekarang akan menambahkan pencarian teks sederhana yang akan menyaring semua objek dalam larik hasil.

Mengikat Elemen HTML ke Ruang Lingkup Variabel

Pertama kita perlu mendeklarasikan variabel $scope.filterText dalam mainController.js sebagai berikut:

1
    app.controller("mainController", function($scope, $http){
2
        $scope.apiKey = "[YOUR API KEY]";
3
        $scope.results = [];
4
        $scope.filterText = null;
5
        $scope.init = function() {
6
            //API requires a start date
7
            var today = new Date();
8
            //Create the date string and ensure leading zeros if required
9
            var apiDate = today.getFullYear() + ("0" + (today.getMonth() + 1)).slice(-2) + "" + ("0" + today.getDate()).slice(-2);
10
            $http.jsonp('http://api.trakt.tv/calendar/premieres.json/' + $scope.apiKey + '/' + apiDate + '/' + 30 + '/?callback=JSON_CALLBACK').success(function(data) {
11
                //As we are getting our data from an external source, we need to format the data so we can use it to our desired affect
12
                //For each day get all the episodes
13
                angular.forEach(data, function(value, index){
14
                    //The API stores the full date separately from each episode. Save it so we can use it later
15
                    var date = value.date;
16
                    //For each episodes add it to the results array
17
                    angular.forEach(value.episodes, function(tvshow, index){
18
                        //Create a date string from the timestamp so we can filter on it based on user text input
19
                        tvshow.date = date; //Attach the full date to each episode
20
                        $scope.results.push(tvshow);
21
                    });
22
                });
23
            }).error(function(error) {
24
25
            });
26
        };
27
    });

Sekarang kita perlu menambahkan input teks sehingga pengguna benar-benar dapat memasukkan istilah pencarian. Kita kemudian perlu mengikat input ini ke variabel yang baru dideklarasikan. Tambahkan HTML berikut dalam div yang memiliki kelas search-box di index.html.

1
    <label>Filter: </label>
2
    <input type="text" ng-model="filterText"/>

Di sini kita telah menggunakan ng-model untuk mengikat input ini ke variabel $scope.filterText yang kita nyatakan dalam ruang lingkup. Sekarang variabel ini akan selalu sama dengan apa yang dimasukkan ke dalam input pencarian ini.

Menegakkan Penyaringan Pada Output ng-repeat

Setelah kita memiliki teks untuk difilter, kita perlu menambahkan fungsionalitas penyaringan untuk ng-repeat. Berkat fungsi filter bawaan AngularJS, kita tidak perlu menulis JavaScript apa pun untuk melakukan ini, cukup ubah ng-repeat Anda sebagai berikut:

1
    <li ng-repeat="tvshow in results | filter: filterText">

Sesederhana itu! Kita memberi tahu AngularJS - sebelum menampilkan data menggunakan ng-repeat, kita perlu menerapkan filter berdasarkan variabel filterText. Buka index.html di browser dan lakukan pencarian. Dengan asumsi Anda mencari sesuatu yang ada, Anda akan melihat pilihan hasil.


Membuat Filter Kustom Genre

Jadi, pengguna kita sekarang dapat mencari apa pun yang ingin mereka tonton, yang lebih baik daripada hanya daftar statis acara TV. Tetapi kita dapat mengambil fungsi filter kita sedikit lebih jauh dan membuat filter khusus yang akan memungkinkan pengguna untuk memilih genre tertentu. Setelah genre tertentu dipilih, ng-repeat seharusnya hanya menampilkan acara TV dengan genre yang dipilih.

Pertama-tama, tambahkan HTML berikut di bawah input filterText di index.html yang kita tambahkan sebelumnya.

1
    <label>Genre: </label>
2
    <select ng-model="genreFilter" ng-options="label for label in availableGenres">
3
        <option value="">All</option>
4
    </select>

Anda dapat melihat dari HTML di atas bahwa kita telah membuat masukan pilih yang terikat ke variabel model yang disebut genreFilter. Dengan menggunakan ng-options kita dapat secara dinamis mengisi input pilih ini menggunakan array yang disebut availableGenres.

Pertama-tama, kita perlu mendeklarasikan variabel cakupan ini. Perbarui file mainController.js Anda menjadi seperti berikut:

1
    app.controller("mainController", function($scope, $http){
2
        $scope.apiKey = "[YOUR API KEY HERE]";
3
        $scope.results = [];
4
        $scope.filterText = null;
5
        $scope.availableGenres = [];
6
        $scope.genreFilter = null;
7
        $scope.init = function() {
8
            //API requires a start date
9
            var today = new Date();
10
            //Create the date string and ensure leading zeros if required
11
            var apiDate = today.getFullYear() + ("0" + (today.getMonth() + 1)).slice(-2) + "" + ("0" + today.getDate()).slice(-2);
12
            $http.jsonp('http://api.trakt.tv/calendar/premieres.json/' + $scope.apiKey + '/' + apiDate + '/' + 30 + '/?callback=JSON_CALLBACK').success(function(data) {
13
                //As we are getting our data from an external source, we need to format the data so we can use it to our desired affect
14
                //For each day get all the episodes
15
                angular.forEach(data, function(value, index){
16
                    //The API stores the full date separately from each episode. Save it so we can use it later
17
                    var date = value.date;
18
                    //For each episodes add it to the results array
19
                    angular.forEach(value.episodes, function(tvshow, index){
20
                        //Create a date string from the timestamp so we can filter on it based on user text input
21
                        tvshow.date = date; //Attach the full date to each episode
22
                        $scope.results.push(tvshow);
23
                        //Loop through each genre for this episode
24
                        angular.forEach(tvshow.show.genres, function(genre, index){
25
                            //Only add to the availableGenres array if it doesn't already exist
26
                            var exists = false;
27
                            angular.forEach($scope.availableGenres, function(avGenre, index){
28
                                if (avGenre == genre) {
29
                                    exists = true;
30
                                }
31
                            });
32
                            if (exists === false) {
33
                                $scope.availableGenres.push(genre);
34
                            }
35
                        });
36
                    });
37
                });
38
            }).error(function(error) {
39
40
            });
41
        };
42
    });

Sangat jelas bahwa sekarang kita telah mendeklarasikan genreFilter dan availableGenres yang telrihat direferensikan dalam HTML kita. Kita juga telah menambahkan beberapa JavaScript yang akan mengisi array availableGenres milik kita. Dalam fungsi init(), saat kita memproses data JSON yang dikembalikan dari API, kita sekarang melakukan beberapa pemrosesan tambahan dan menambahkan genre apa pun yang belum ada dalam array availableGenres ke array ini. Ini kemudian akan mengisi input pilih dengan genre yang tersedia.

Jika Anda membuka index.html di browser Anda, Anda akan melihat genre pilih drop down mengisi seperti yang digambarkan di bawah ini:

figure6-genre-select-drop-downfigure6-genre-select-drop-downfigure6-genre-select-drop-down

Ketika pengguna memilih genre, variabel $scope.genreFilter akan diperbarui untuk menyamai nilai yang dipilih.

Membuat Filter Kustom

Karena kita ingin memfilter bagian tertentu dari objek acara TV, kita akan membuat fungsi filter khusus dan menerapkannya bersama filter AngularJS dalam ng-repeat.

Di bagian paling bawah mainController.js, setelah semua kode lainnya, tambahkan JavaScript berikut:

1
    app.filter('isGenre', function() {
2
        return function(input, genre) {
3
            if (typeof genre == 'undefined' || genre == null) {
4
                return input;
5
            } else {
6
                var out = [];
7
                for (var a = 0; a < input.length; a++){
8
                    for (var b = 0; b < input[a].show.genres.length; b++){
9
                        if(input[a].show.genres[b] == genre) {
10
                            out.push(input[a]);
11
                        }
12
                    }
13
                }
14
                return out;
15
            }
16
        };
17
    });

JavaScript di atas menyatakan filter khusus untuk aplikasi kita bernama isGenre. Fungsi dalam filter membutuhkan dua parameter, input dan genre. input disediakan secara default (yang akan kita lihat sebentar lagi) dan semua data yang sedang diproses ng-repeat. genre adalah nilai yang harus kita lewati. Semua filter ini, adalah mengambil genre yang ditentukan dan memeriksa untuk melihat apakah masing-masing objek acara TV dalam input memiliki genre tertentu yang melekat padanya. Jika suatu objek memiliki genre yang ditentukan, ia menambahkannya ke array out, yang kemudian akan dikembalikan ke ng-repeat. Jika ini tidak masuk akal, jangan khawatir! Seharusnya singkat.

Menerapkan Filter Kustom

Sekarang setelah filter pelanggan tersedia, kita dapat menambahkan filter tambahan ini ke ng-repeat. Ubah ng-repeat Anda di index.html sebagai berikut:

1
    <li ng-repeat="tvshow in results | filter: filterText | isGenre:genreFilter">

Ini hanya rantai filter lain ke output ng-repeat. Sekarang hasilnya akan diproses oleh kedua filter sebelum ditampilkan di layar. Seperti yang Anda lihat, kita telah menetapkan filter khusus kita seperti isGenre: dan kemudian kita memberikan variabel cakupan genreFilter sebagai parameter, yang adalah bagaimana kita menyediakan filter pelanggan kita dengan variabel genre yang telah kita bahas sebelumnya. Ingat bahwa AngularJS juga menyediakan filter kami dengan data yang ng-repeat diproses sebagai variabel input.

Oke, filter genre khusus kami selesai. Buka index.html di browser dan uji fungsi baru. Dengan filter ini, pengguna dapat dengan mudah memfilter genre yang tidak mereka minati.


Memanggil Fungsi Ruang Lingkup

Anda mungkin memperhatikan bahwa setiap daftar acara TV juga menunjukkan genre itu sendiri. Untuk beberapa fungsi tambahan, kita akan mengizinkan pengguna untuk mengklik genre ini, yang kemudian akan secara otomatis menerapkan filter genre untuk genre yang telah mereka klik. Pertama-tama, kita perlu membuat fungsi ruang lingkup yang dapat dipanggil oleh ng-click. Tambahkan kode berikut dalam mainController di mainController.js:

1
    $scope.setGenreFilter = function(genre) {
2
        $scope.genreFilter = genre;
3
    }

Dalam kode di atas, fungsi ini mengambil nilai genre dan kemudian menetapkan $scope.genreFilter ke nilai yang ditentukan. Ketika ini terjadi, filter genre pilih nilai kotak akan memperbarui dan filter akan diterapkan ke output ng-repeat. Untuk memicu fungsi ini ketika elemen rentang genre diklik, tambahkan sebuah ng-click ke elemen rentang genre dalam index.html sebagai berikut:

1
    <span class="label label-inverse genre" ng-repeat="genre in tvshow.show.genres" ng-click="setGenreFilter(genre)">{{genre}}</span>

The ng-click panggilan fungsi setGenreFilter kita sebelumnya dibuat dan menentukan genre. Buka index.html dan cobalah!


Pesanan Kustom Dengan AngularJS

Aplikasi perdana acara TV kita terlihat bagus, pengguna dapat dengan mudah menyaring hasil yang ditampilkan menggunakan serangkaian filter intuitif. Untuk meningkatkan pengalaman ini kita akan menambahkan beberapa fungsi pemesanan kustom sehingga pengguna kita akan dapat memilih berbagai opsi pemesanan.

Tambahkan HTML berikut di bawah pilihan genre drop down:

1
    <label>Order by: </label>
2
    <select ng-model="orderField" ng-options="label for label in orderFields" class="input-medium"></select>
3
    <select ng-model="orderReverse"class="input-medium">
4
        <option value="true">Descending</option>
5
        <option value="false">Ascending</option>
6
    </select>

Dengan kode ini ditambahkan, kiita memiliki dua drop down lagi. Satu untuk memilih cara memesan data dan lainnya untuk memilih arah untuk memesan data. Kita sekarang perlu membuat fungsi dalam pengontrol untuk membuat perbandingan pesanan. Tambahkan JavaScript berikut di bawah fungsi setGenreFilter kita:

1
    $scope.customOrder = function(tvshow) {
2
        switch ($scope.orderField) {
3
            case "Air Date":
4
                return tvshow.episode.first_aired;
5
                break;
6
            case "Rating":
7
                return tvshow.episode.ratings.percentage;
8
                break;
9
        }
10
    };

Kita juga perlu mendeklarasikan beberapa variabel cakupan tambahan:

1
    $scope.orderFields = ["Air Date", "Rating"];
2
    $scope.orderDirections = ["Descending", "Ascending"];
3
    $scope.orderField = "Air Date"; //Default order field
4
    $scope.orderReverse = false;

Jika Anda sekarang membuka index.html dalam browser Anda, Anda akan melihat penurunan tambahan yang diisi dengan Air Date yang sudah dipilih sebagai bidang pesanan default. Ini ditunjukkan pada gambar di bawah ini:

figure7-order-drop-downsfigure7-order-drop-downsfigure7-order-drop-downs

Akhirnya, seperti yang telah dilakukan dengan filter yang lain, kita akan perlu menambahkan ini ke ng-repeat, perbarui ini sebagai berikut:

1
    <li ng-repeat="tvshow in results | filter: filterText | isGenre:genreFilter | orderBy:customOrder:orderReverse">

Kita sekarang menerapkan urutan-demi-filter pada data kita selain filter lainnya. Kita memberi tahu pesanan dengan menggunakan fungsi customOrder dan kita meneruskan variabel cakupan orderReverse juga Buka index.html di browser dan lihat Pemesanan dalam tindakan.


Kesimpulan

AngularJS telah memungkinkan kita untuk dengan cepat membuat aplikasi web yang detail dan fungsional dengan upaya minimum. Memanfaatkan fungsi filter bawaan AngularJS, bersama dengan beberapa kode khusus kami sendiri, aplikasi web kita memungkinkan pengguna dengan mudah memfilter dan mencari melalui tayangan perdana acara TV.

Setelah membaca tutorial ini Anda sekarang harus dapat memahami dan menggunakan prinsip-prinsip berikut:

  • Menggunakan ng-repeat untuk menampilkan informasi di layar.
  • Mengikat input, memungkinkan pengguna untuk mencari dan memfilter keluaran ng-repeat.
  • Chaining filter pada ng-repeat untuk melakukan beberapa fungsi penyaringan.
  • Pengurutan data secara khusus.
  • Menggunakan acara seperti ng-click untuk menanggapi interaksi pengguna.
  • Menggunakan ng-class untuk menerapkan gaya secara kondisional ke elemen halaman.

Jadi kesimpulannya, topik yang dibahas dalam tutorial ini harus memberi Anda dasar yang kuat dan pemahaman tentang apa yang dapat Anda capai saat membuat aplikasi web yang kaya di AngularJS.

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.