Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Ionic

Memulai Ionic: Navigasi

by
Difficulty:BeginnerLength:LongLanguages:

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

Final product image
What You'll Be Creating

Kita telah membahas cukup banyak di dalam seri ini, termasuk navigasi. Namun, Ionic menyediakan beberapa komponen yang menyediakan fitur tambahan untuk membangun navigasi yang lebih fungsional. Di dalam tutorial ini, kita menambahkan menu samping dan komponen tab ke dalam aplikasi, dan kita juga membahas beberapa layanan tambahan untuk membuat navigasi aplikasi yang lebih pintar.

File-File Project Tutorial

File-file untuk project tutorial tersedia di GitHub. The general premise of the app is that it shows some information about local facilities. Di dalam tutorial ini, kita menambahkan kemampuan untuk menunjukkan perpustakaan, museum, taman, dan rumah sakit. Saat ini, itu hanya menampilkan lokasi di Chicago, sesuatu yang akan kita perbaiki dalam tutorial berikutnya.

Kamu bisa mengunduh project lengkap untuk tutorial ini dari GitHub. Jika kamu mengklon project, kamu bisa juga melakukan coding dengan menggunakan Git dan menjalankan git checkout –b start. Contoh akhir juga tersedia untuk pratinjau.

Perhatikan bahwa saya telah menghapus resolve dari tampilan tempat yang kita punya di bagian ketiga seri ini. Saya tidak ingin membahasnya lebih dalam, namun controller memuat data sekarang dan membuat navigasi lebih sederhana.

1. Menambahkan Menu Samping

Salah satu pola navigasi umum dalam aplikasi mobile adalah menu samping. Ini merupakan sebuah kotak yang bergeser dari bagian samping dan menampilkan tautan navigasi dan barangkali konten lainnya, seperti status login terkini. Berdasarkan desain, mereka di luar layar dan terbuka oleh beberapa jenis tombol, seringkali berupa icon hamburger, walaupun orang-orang tidak setuju dengan penggunaan icon tersebut.

Ionic Side Menu

Menu samping seringkali dapat dibuka dengan menggeser dari bagian samping untuk membukanya atau menggeser balik untuk menutupnya. Ini bisa berguna, namun terkadang itu bisa mengganggu gestur lainnya dan kamu hendaklah memperhatikan perilaku yang bertentangan. Kamu hendaklah mempertimbangkan penggunaan terbaik dalam menggeser dengan visi dan pengelaman menyeluruh aplikasi dalam benakmu, dan jika ada permasalahan kamu bisa menonaktifkannya.

Ionic menyediakan beberapa komponen yang membuatnya sepele untuk mengatur sebuah menu samping. Kamu bisa membuat hingga dua menu samping, satu di sisi kanan dan satu lagi di sisi kiri. Sebuah menu samping A side menu terdiri dari beberapa komponen, ionSideMenusionSideMenu, dan ionSideMenuContent.

Untuk melihat aksi dari komponen ini, mari perbaharui www/index.html dan atur sebuah menu samping. Kamu akan mengganti konten yang telah ada dengan code di bawah, yang menambahkan komponen menu samping pada code yang telah ada.

Untuk mengaktifkan menu samping, kita mulai dengan membungkus konten aplikasi dalam ionSideMenus. Itu memungkinkan Ionic untuk mengkoordinasikan area menu samping dan konten. Kemudian kita memiliki ionSideMenu dengan atribut side="left" untuk menentukan sisi itu berada.

Di dalam menu samping, kita bisa meletakkan konten yang kita inginkan. Dalam kasus ini, dan mungkin skenario yang paling umum, kontennya adalah komponen ionHeaderBar dan komponen ionList untuk me-render masing-masing judul aplikasi dan daftar tautan. Kita belum menentukan tampilan pengaturan, jadi tautan tersebut akan gagal untuk saat ini. Juga perhatikan bahwa komponen ionItem memiliki atribut menu-close. Ini secara otomatis menutup menu samping ketika pengguna mengklik tautan, jika tidak itu tetap terbuka.

Komponen ionSideMenuContent digunakan untuk menampung area konten utama. Area konten ini mengambil keseluruhan layar, namun komponen ini hanya membantu komponen menu samping melakukan rendering dengan benar.  Kita juga menggunakan atribut drag-content="false" untuk menonaktifkan gestur seret karena mereka akan mengganggu proses scrolling daftar dan tab.

Kita juga menambahkan tombol baru pada bar navigasi dengan menggunakan ionNavButtons.  Ini adalah menu samping yang muncul pada kanan atas sebagai tiga garis bersusun.  Tombol ini memiliki atribut menu-toggle="left", yang memicu menu samping kiri untuk aktif ketika dipilih.

Sekarang setelah menu samping berada pada tempatnya, mari kerjakan pengaturan komponen navigasional besar berikutnya dengan menambahkan tab untuk tampilan pengaturan.

2. Tab Dengan Histori Navigasi Individual

Tab merupakan pola navigasi umum lainnya untuk melakukan navigasi dalam aplikasi.  Tab mudah dimengerti karena kita melihatnya dalam begitu banyak jenis antarmuka, tidak hanya aplikasi mobile.

Tab bisa berupa stateful atau stateless.  Sebuah tab yang menampilkan konten yang tidak menyimpan memori perubahan disebut stateless sementara tab yang menjaga kondisi berdasarkan interaksi pengguna disebut stateful (sebagai contoh, mempertahankan hasil pencarian). Kita melihat bagaimana membuat tab stateful dengan Ionic karena mereka lebih kompleks dan lebih bertenaga.

Ionic Tabs

Pengaturan tab cukup mudah dengan komponen ionTabs dan ionTab.  Cukup mirip seperti menu sampingan, kamu menempatkan komponen tab sebanyak yang kamu sukai.  Tidak ada batasan, namun saya melihat bahwa lima merupakan nilai maksimum yang sehat.  Pada perangkat yang lebih kecil, terlalu banyak icon membuat sulit untuk memilih tab.

Kita akan mengatur tab dengan membuat beberapa file baru.  Pertama-tama, mari atur template dengan membuat file baru di www/views/settings/settings.html.  Tambahkan code berikut pada file baru.

Komponen ionTabs digunakan untuk membungkus komponen ionTab bagian dalam.  Ada beberapa class yang bisa menentukan bagaimana tab muncul, seperti menempatkan tab di bagian atas atau bawah, dengan menggunakan icon dengan atau tanpa judul, dan banyak lagi.  Di sini, kita telah memutuskan untuk menggunakan tab yang memiliki judul dengan icon di bagian atas dengan preset warna yang stabil.

Komponen ionTab memiliki sejumlah atribut yang bisa digunakan untuk menentukan perilakunya.  Itu mendukung banyak fitur, seperti menunjukkan badge kecil notifikasi, menautkan tab ke kondisi, perilaku icon, dan banyak lagi.  Untuk tab kita, masing-masing memiliki title, sebuah class icon untuk ketika tab sedang aktif (icon-on) atau nonaktif (icon-off), dan menautkan ke kondisi dengan menggunakan ui-sref.

Di dalam tiap tab merupakan ionNavView lainnya.  Ini mungkin tampak di luar tempatnya karena kita telah mengatur ionNavView di index.html.  Apa yang kita sedang lakukan adalah menyatakan lokasi tambahan dimana kondisi bisa di-render, yang bisa dipikirkan sebagai tampilan turunan (child views).

Tiap tab dapat memiliki histori navigasinya sendiri, karena tiap ionNavView independen terhadap lainnya.  Tiap tab juga memiliki nama unik, yang akan berguna sehingga kita bisa menentukan kondisi tertentu untuk muncul di dalam ionNavView yang diberi nama.

Kamu mungkin menyadari tidak ada elemen ionView pada halaman ini dan itu penting untuk dicatat ketika menggunakan tab stateful.  Itu tidak diperlukan ketika kamu menggunakan ionTabs dalam cara ini, hanya jika kamu menggunakan tab stateless, versi komponen CSS, kamu akan memerlukannya.

Kita sekarang perlu mengatur beberapa kondisi tambahan untuk membuat contoh berfungsi.  Buat file lainnya di www/views/settings/settings.js dan tambahkan code berikut.

Kamu bisa melihat bahwa kita mengatur beberapa kondisi baru, namun ini tampak berbeda dari lainnya yang telah kita tentukan sejauh ini.  Kondisi pertama merupakan kondisi abstrak, yang pada dasarnya merupakan kondisi yang tidak dapat dimuat secara langsung secara mandiri dan memiliki turunan.  Ini masuk akal bagi kita dengan antarmuka tab karena kondisi settings memuat template komponen tab, namun pengguna tidak pernah hanya pada komponen tab.  Mereka selalu melihat tab aktif, yang mengandung kondisi lainnya.  Jadi dengan menggunakan abstrak memberikan kita kemampuan untuk mengikat dengan benar.

Ketiga kondisi lainnya ditentukan sebagai settings.[name].  Ini memungkinkan kita menentukan hubungan induk-turunan antara kondisi tersebut, yang pada dasarnya mencerminkan hubungan induk-turunan antara komponen ionTabs dan ionTab.  Kondisi tersebut menggunakan properti view, yang merupakan sebuah obyek dengan properti yang diberi nama untuk digunakan oleh view.

Nama yang kamu berikan pada template dengan ionNavView hendaklah cocok dengan nama properti. Nilai properti tersebut kemudian memiliki definisi kondisi yang sama, tanpa url yang dinyatakan dengan cara biasa.  url juga mengikuti hubungan induk-turunan dengan menggabungkan keduanya. Jadi semua kondisi turunan ini di-render seperti /settings/preferences.

Kamu perlu menambahkan settings.js pada index.html dengan menggunakan tag script lainnya.  Setelah kamu melakukan itu, kamu akan melihat beberapa error karena kita mengacukan sejumlah file yang belum kita buat.  Mari selesaikan dengan template tab kita.

Kita perlu membuat tiga.  Dua pertama merupakan konten statis sehingga saya tidak akan membahasnya secara detail.  Buat file di www/views/settings/tab.about.html dan tambahkan konten berikut.

Ini mengandung sebuah template yang menampilkan beberapa informasi.  Itu tertaut ke project GitHub dan lisensi.  Tampilannya seperti berikut ini.

About Tab

Buat file lainnya di www/views/settings/tab.license.html dan tambahkan konten berikut.

Ini berisi konten lisensi (MIT) untuk code ini.  Ada kartu sederhana untuk memuat konten.  Tampilan sebagai berikut.

License State

Template akhir memuat beberapa elemen form.  Saya akan membahasnya lebih detail.  Buat sebuah file baru di www/views/settings/tab.preferences.html dan tambahkan konten berikut.

Tampilan ini memuat daftar toggles yang menunjukkan empat jenis tempat yang bisa ditampilkan oleh aplikasi, museum, taman, perpustakaan, dan rumah sakit.  Masing-masing item daftar ini memungkinkanmu untuk mengaktifkan atau menonaktifkan jenis tempat dari daftar.  Tombol toggle merupakan komponen CSS.  Kita hanya perlu menggunakan input kotak centang dengan penanda spesifik ini dan struktur class CSS untuk membuatnya tampak sebuah tombol toggle mobile.

Preference Toggle Buttons

Tampilan ini memiliki kontroler yang dinyatakan dalam settings.js, namun itu memasukkan layanan Types yang belum kita buat.  Kita akan memperbaiki itu dengan menambahkan layanan baru pada www/js/app.js.

Layanan ini memegang kumpulan jenis tempat. Itu memiliki properti untuk nama masing-masing tempat dan apakah itu diaktifkan atau dinonaktifkan. Kita menggunakan properti yang diaktifkan dalam tombol toggle ngModel untuk melacak keadaan jika jenis tersebut harus ditampilkan.

Pada poin ini, kamu bisa membuka menu samping dan melakukan navigasi pada tautan pengaturan. Kamu dapat melihat dua tab, preferences dan about. Di dalam tab preferences, kamu bisa melakukan toggle jenis tempat ke posisi on atau off.

Jika kamu pergi ke tab about, kamu bisa memilih lisensi dan melihat bagaimana itu melakukan navigasi ke rute lainnya di dalam tab. Jika kamu berpindah antara tab preferences dan about setelah melihat lisensi, kamu bisa melihat bahwa tab mengingat tempatmu sebelumnya pada kondisi lisensi bahkan setelah kamu meninggalkannya, yang menunjukkan sifat stateful dari tab ini.

Langkah terakhir dalam tutorial ini adalah memperbaharui tampilan tempat untuk menggunakan layanan Types yang hanya memuat jenis tempat yang diinginkan dan menggunakan layanan histori untuk menangani ketika memuat ulang atau menggunakan cache.

3. Caching dan Penggunaan Layanan Histori

Secara default, Ionic melakukan caching 10 tampilan terakhir dan menyimpannya di memori. Kebanyakan aplikasi bahkan tidak memiliki kondisi sebanyak itu, yang berarti keseluruhan aplikasi tetap berada di dalam memori. Ini berguna karena itu berarti bahwa Ionic tidak harus me-render tampilan lagi sebelum melakukan navigasi, yang mempercepat aplikasi.

Ini bisa menyebabkan beberapa permasalahan perilaku karena kamu mungkin mengira bahwa kondisi selalu memuat ulang dan memulai ulang controller tiap kali kondisi tersebut diakses.  Karena hanya 10 tampilan yang mengalami caching, jika kamu memiliki 20 tampilan, hanya 10 terakhir yang berada dalam cache. Itu berarti kamu tidak dapat menjamin bahwa sebuah tampilan berada dalam cache atau tidak. Sehingga kamu hendaklah menghindari melakukan pengaturan logic dalam controller di luar kait siklus hidup. Kamu bisa juga mengkonfigurasi strategi caching dengan menggunakan $ionicConfigProvider.

Terkadang kamu perlu melihat histori navigasi pengguna untuk menentukan apa yang harus dilakukan. Sebagai contoh, di dalam aplikasi ini, kita ingin memastikan daftar tempat tetap berada dalam cache jika pengguna mengetuk sebuah tempat dan kemudian kembali ke daftar.  Jika kita secara otomatis memuat ulang daftar setiap kali mengunjunginya, pengguna bisa kehilangan tempatnya pada daftar setelah mereka melakukan scrolling dan melihat sebuah tempat.

Di sisi lain, jika pengguna melakukan navigasi pada halaman pengaturan dan kemudian kembali ke daftar tempat, kita ingin memuat ulang daftar karena mereka mungkin telah mengubah jenis tempat yang ingin ditampilkan.

Kita akan menggunakan kombinasi life cycle events yang telah kita lihat sebelumnya dengan layanan $ionicHistory untuk menambahkan beberapa kondisi tempat jika daftar dimuat ulang.  Kita juga ingin menggunakan layanan Types untuk membantu kita hanya memuat jenis tempat yang ingin dilihat pengguna.

Buka www/views/places/places.js dan perbaharui itu untuk mencocokkan code berikut. Kita perlu mengubah cara data dimuat ulang dan menggunakan layanan $ionicHistory untuk menginspeksi histori untuk menentukan kapan melakukan muat ulang.

Pertama-tama, kita telah memodifikasi cara URL dibuat agar API berubah dari hanya memuat taman menjadi memuat jenis yang diminta. Jika kamu membandingkan ini dengan versi sebelumnya, itu terutama dengan menggunakan angular.forEach untuk melakukan looping pada tiap jenis dan menambahkan itu pada URL.

Kita juga telah memodifikasi cara layanan $ionicLoading bertindak. Alih-alih berjalan langsung ketika controller berjalan, kita memicu itu kapanpun metode vm.load() dipanggil. Ini penting karena controller akan mengalami caching dan tidak akan memuat ulang data secara default.

Perubahan terbesar adalah life cycle event handler $ionicView.beforeEnter. Event ini berjalan sebelum tampilan akan menjadi tampilan aktif berikutnya dan namun memungkinkan kita melakukan pengaturan. Kita menggunakan metode $ionicHistory.forwardView()  untuk mendapatkan informasi tentang tampilan terakhir pengguna berada.

Jika itu adalah muatan pertama, maka ini akan kosong, jika tidak itu mengembalikan beberapa data tentang kondisi terakhir. Kita kemudian memeriksa apakah kondisi sebelumnya berupa tempat dan, jika demikian, kita menggunakan daftar hasil cache. Juga, karena kita memiliki kurang dari 10 state, kita tahu state akan selalu disimpan di dalam memori.

Jika tidak, itu akan me-reset nilai cache dan memicu muatan data baru.  Ini berarti kapanpun saya kembali ke tampilan tempat setelah pergi ke pengaturan, itu akan memuat ulang data.  Tergantung pada desain aplikasi, kamu akan cenderung ingin mendesain aturan kondisional yang berbeda tentang cara menangani caching dan memuat ulang.

Layanan histori menyediakan lebih banyak informasi, kumpulan histori menyeluruh, kemampuan untuk memodifikasi histori, detail tentang kondisi terkini, dan banyak lagi. Kamu bisa menggunakan layanan ini untuk memperbaiki pengalaman saat melakukan navigasi dalam aplikasi.

Kita akan membuat dua perbaikan kecil lainnya pada template tempat.  Buka www/views/places/places.html dan ubah judul menjadi Local Places.

Berikutnya, perbaharui komponen infinite scroll dengan satu atribut lagi, immediate-check, untuk mencegah komponen infinite scroll component dari memuat data pada waktu yang sama saat muatan awal terjadi. Ini pada dasarnya membantu mencegah permintaan duplikasi yang menyebabkan lebih banyak data.

Pada titik ini, kita telah membuat sebuah aplikasi yang cukup solid yang memiliki fitur-fitur yang bagus. Kita akan menutup seri ini dengan satu tutorial terakhir yang membahas Cordova dan memadukan beberapa fitur perangkat, seperti mengakses data GPS.

Kesimpulan

Navigasi dengan Ionic selalu dimulai dengan menyatakan beberapa keadaan. Penampilan navigasi itu bisa dilakukan dengan berbagai cara seperti yang kita lihat dalam tutorial ini.  Berikut adalah apa yang telah kita bahas dalam tutorial ini:

  • Komponen menu samping memudahkan untuk membuat satu atau dua menu samping yang bisa diaktifkan berdasarkan permintaan atau saat digeser.
  • Tab bisa berupa stateless atau stateful. Tab stateful bisa memiliki tampilan individual dengan histori navigasi yang terpisah.
  • Tab memiliki banyak pilihan konfigurasi mengenai bagaimana icon dan teks ditampilkan.
  • Tombol toggle merupakan komponen CSS yang berkerja seperti kotak centang, namun didesain untuk mobile.
  • Kamu bisa menggunakan layanan $ionicHistory untuk mempelajari lebih lanjut tentang histori navigasional aplikasi untuk menyesuaikan pengalaman.
Advertisement
Advertisement
Advertisement
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.