Saya memigrasi aplikasi berbasis AngularJS saya untuk menggunakan ui-router alih-alih perutean bawaan. Saya sudah mengonfigurasi seperti yang ditunjukkan di bawah ini
.config(function($stateProvider, $urlRouterProvider) {
$urlRouterProvider.otherwise('/home');
$stateProvider
.state('home', {
url: '/home',
templateUrl : 'views/home.html',
data : { pageTitle: 'Home' }
})
.state('about', {
url: '/about',
templateUrl : 'views/about.html',
data : { pageTitle: 'About' }
})
});
Bagaimana saya dapat menggunakan variabel pageTitle untuk menyetel judul halaman secara dinamis? Dengan menggunakan perutean bawaan, saya bisa melakukannya
$rootScope.$on("$routeChangeSuccess", function(currentRoute, previousRoute){
$rootScope.pageTitle = $route.current.data.pageTitle;
});
dan kemudian mengikat variabel dalam HTML seperti yang ditunjukkan di bawah ini
<title ng-bind="$root.pageTitle"></title>
Apakah ada peristiwa serupa yang bisa saya hubungkan dengan menggunakan ui-router? Saya perhatikan bahwa ada fungsi 'onEnter' dan 'onExit' tetapi tampaknya terkait dengan setiap status dan akan meminta saya mengulangi kode untuk menyetel variabel $ rootScope untuk setiap status.
Jawaban:
Gunakan
$stateChangeSuccess
.Anda dapat memasukkannya ke dalam petunjuk:
Dan:
Demo: http://run.plnkr.co/8tqvzlCw62Tl7t4j/#/home
Kode: http://plnkr.co/edit/XO6RyBPURQFPodoFdYgX?p=preview
Bahkan dengan
$stateChangeSuccess
yang$timeout
telah dibutuhkan untuk sejarah menjadi benar, setidaknya ketika saya telah menguji diri saya sendiri.Edit: 24 Nov 2014 - Pendekatan deklaratif:
Dan:
Demo: http://run.plnkr.co/d4s3qBikieq8egX7/#/credits
Kode: http://plnkr.co/edit/NpzQsxYGofswWQUBGthR?p=preview
sumber
element.text(title)
panggilan dengan $ timeout berhasil bagi saya. Mengedit postingan asli.resolve
untuk menghasilkan itu, kemudian mengakses "diselesaikan" nilai selama $ acara stateChangeSuccess dengan:$state.$current.locals.resolve.$$values.NAME_OF_RESOLVE_FUNCTION
.Ada cara lain untuk melakukan ini dengan menggabungkan sebagian besar jawaban di sini. Saya tahu ini sudah dijawab tetapi saya ingin menunjukkan cara saya mengubah judul halaman secara dinamis dengan ui-router.
Jika Anda melihat aplikasi sampel ui-router , mereka menggunakan blok angular .run untuk menambahkan variabel $ state ke $ rootScope.
Dengan ini didefinisikan, Anda kemudian dapat dengan mudah memperbarui judul halaman Anda secara dinamis dengan apa yang telah Anda posting tetapi dimodifikasi untuk menggunakan status yang ditentukan:
Siapkan negara bagian dengan cara yang sama:
Tapi edit html-nya sedikit ...
Saya tidak bisa mengatakan ini lebih baik dari jawaban sebelumnya ... tetapi lebih mudah bagi saya untuk memahami dan menerapkan. Semoga ini bisa membantu seseorang!
sumber
$state
dan$stateParams
pada$rootScope
dari dalamrun
.The sudut-ui-router-judul Plugin memudahkan untuk memperbarui judul halaman ke statis atau dinamis nilai berdasarkan kondisi saat ini. Ini berfungsi dengan benar dengan riwayat browser juga.
sumber
$stateChangeSuccess
sekarang tidak digunakan lagi di UI-Router 1.x dan dinonaktifkan secara default. Sekarang Anda harus menggunakan$transition
layanan baru .Solusi tidak terlalu sulit setelah Anda memahami cara
$transition
kerjanya. Saya mendapat bantuan dari @troig untuk memahami semuanya. Inilah yang saya dapatkan untuk memperbarui judul.Taruh ini di aplikasi Angular 1.6 Anda. Perhatikan bahwa saya menggunakan sintaks ECMAScript 6; jika tidak, Anda perlu misalnya pindah
let
kevar
.Kemudian tambahkan saja
title
string ke status Anda:Itu akan membuat kata-kata "Foo Page" muncul di judul. (Jika suatu negara bagian tidak memiliki judul, judul halaman tidak akan diperbarui. Ini akan menjadi hal yang sederhana untuk memperbarui kode di atas untuk memberikan judul default jika suatu negara tidak menunjukkannya.)
Kode juga memungkinkan Anda menggunakan fungsi untuk
title
. Thethis
digunakan untuk memanggil fungsi akan menjadi negara sendiri, dan satu argumen akan menjadi parameter negara, seperti contoh ini:Untuk jalur URL
/bar/code/123
yang akan menampilkan "Bar Code 123" sebagai judul halaman. Perhatikan bahwa saya menggunakan sintaks ECMAScript 6 untuk memformat string dan mengekstrakparams.code
.Alangkah baiknya jika seseorang yang punya waktu akan memasukkan sesuatu seperti ini ke dalam arahan dan menerbitkannya untuk digunakan semua orang.
sumber
data
objek untuk kunci khusus.title
tidak ada diStateDeclaration
antarmuka.Melampirkan $ state ke $ rootscope untuk digunakan di mana saja dalam aplikasi.
sumber
Saya menemukan cara ini sangat mudah:
dan kemudian di HTML saya seperti ini:
sumber
Cukup perbarui window.document.title:
Dengan begitu 'ng-app' tidak perlu naik ke tag HTML dan bisa tetap di body atau lebih rendah.
sumber
Saya menggunakan ngMeta , yang berfungsi dengan baik tidak hanya untuk menyetel judul halaman tetapi juga deskripsi. Ini memungkinkan Anda menetapkan judul / deskripsi tertentu untuk setiap negara bagian, default ketika judul / deskripsi tidak ditentukan, serta sufiks judul default (yaitu, '| MySiteName') dan nilai pengarang.
sumber
Anda sebenarnya sangat dekat dengan jawaban / pertanyaan pertama Anda. Tambahkan judul Anda sebagai objek data:
Di index.html, ikat data langsung ke judul halaman:
sumber
Saya berakhir dengan kombinasi jawaban Martin dan tasseKATT ini - sederhana dan tanpa hal-hal terkait template:
sumber
Mengapa tidak hanya:
UPDATE: Kode Petunjuk Lengkap
Kemudian di setiap halaman Anda hanya akan memasukkan arahan ini:
sumber
Jika Anda menggunakan ES6, ini berfungsi dengan baik :).
sumber
Mungkin Anda bisa mencoba arahan ini.
https://github.com/afeiship/angular-dynamic-title
Berikut contohnya:
html:
javascript:
sumber
Untuk versi Pembaruan UI-Router 1.0.0+, ( https://ui-router.github.io/guide/ng1/migrate-to-1_0 )
Lihat kode berikut
Tambahkan yang berikut ke index.html Anda:
sumber